diff options
| author | Barry O'Reilly | 2013-09-25 23:46:47 -0400 |
|---|---|---|
| committer | Barry O'Reilly | 2013-09-25 23:46:47 -0400 |
| commit | ba355de014b75ed104da4777f909db70d62f2357 (patch) | |
| tree | dab161a69cb4e4dc54e07ac1d465bf39c8aad475 /src | |
| parent | 3958758036f64a1c93728ab0a2cb9ea872c59e35 (diff) | |
| download | emacs-ba355de014b75ed104da4777f909db70d62f2357.tar.gz emacs-ba355de014b75ed104da4777f909db70d62f2357.zip | |
Signal error when reading an empty byte-code object (Bug#15405)
* lread.c (read1): signal error
* alloc.c (make_byte_code): eassert header size
(sweep_vectors): change an int to size_t
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 7 | ||||
| -rw-r--r-- | src/alloc.c | 4 | ||||
| -rw-r--r-- | src/lread.c | 5 |
3 files changed, 14 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 3f0c4196afd..a6774e30b0c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,10 @@ | |||
| 1 | 2013-09-26 Barry O'Reilly <gundaetiapo@gmail.com> | ||
| 2 | |||
| 3 | Signal error when reading an empty byte-code object (Bug#15405) | ||
| 4 | * lread.c (read1): signal error | ||
| 5 | * alloc.c (make_byte_code): eassert header size | ||
| 6 | (sweep_vectors): change an int to size_t | ||
| 7 | |||
| 1 | 2013-09-24 Paul Eggert <eggert@cs.ucla.edu> | 8 | 2013-09-24 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 9 | ||
| 3 | * dispnew.c (clear_glyph_row, copy_row_except_pointers): Use enums | 10 | * dispnew.c (clear_glyph_row, copy_row_except_pointers): Use enums |
diff --git a/src/alloc.c b/src/alloc.c index ca21ba2469b..2d9828ffa79 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -2889,7 +2889,7 @@ sweep_vectors (void) | |||
| 2889 | free_this_block = 1; | 2889 | free_this_block = 1; |
| 2890 | else | 2890 | else |
| 2891 | { | 2891 | { |
| 2892 | int tmp; | 2892 | size_t tmp; |
| 2893 | SETUP_ON_FREE_LIST (vector, total_bytes, tmp); | 2893 | SETUP_ON_FREE_LIST (vector, total_bytes, tmp); |
| 2894 | } | 2894 | } |
| 2895 | } | 2895 | } |
| @@ -3132,6 +3132,8 @@ usage: (vector &rest OBJECTS) */) | |||
| 3132 | void | 3132 | void |
| 3133 | make_byte_code (struct Lisp_Vector *v) | 3133 | make_byte_code (struct Lisp_Vector *v) |
| 3134 | { | 3134 | { |
| 3135 | /* Don't allow the global zero_vector to become a byte code object. */ | ||
| 3136 | eassert(0 < v->header.size); | ||
| 3135 | if (v->header.size > 1 && STRINGP (v->u.contents[1]) | 3137 | if (v->header.size > 1 && STRINGP (v->u.contents[1]) |
| 3136 | && STRING_MULTIBYTE (v->u.contents[1])) | 3138 | && STRING_MULTIBYTE (v->u.contents[1])) |
| 3137 | /* BYTECODE-STRING must have been produced by Emacs 20.2 or the | 3139 | /* BYTECODE-STRING must have been produced by Emacs 20.2 or the |
diff --git a/src/lread.c b/src/lread.c index 017dfcb11a5..fe2b92a34b3 100644 --- a/src/lread.c +++ b/src/lread.c | |||
| @@ -2597,7 +2597,10 @@ read1 (Lisp_Object readcharfun, int *pch, bool first_in_list) | |||
| 2597 | build them using function calls. */ | 2597 | build them using function calls. */ |
| 2598 | Lisp_Object tmp; | 2598 | Lisp_Object tmp; |
| 2599 | tmp = read_vector (readcharfun, 1); | 2599 | tmp = read_vector (readcharfun, 1); |
| 2600 | make_byte_code (XVECTOR (tmp)); | 2600 | struct Lisp_Vector* vec = XVECTOR (tmp); |
| 2601 | if (vec->header.size==0) | ||
| 2602 | invalid_syntax ("Empty byte-code object"); | ||
| 2603 | make_byte_code (vec); | ||
| 2601 | return tmp; | 2604 | return tmp; |
| 2602 | } | 2605 | } |
| 2603 | if (c == '(') | 2606 | if (c == '(') |