aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorBarry O'Reilly2013-09-25 23:46:47 -0400
committerBarry O'Reilly2013-09-25 23:46:47 -0400
commitba355de014b75ed104da4777f909db70d62f2357 (patch)
treedab161a69cb4e4dc54e07ac1d465bf39c8aad475 /src
parent3958758036f64a1c93728ab0a2cb9ea872c59e35 (diff)
downloademacs-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/ChangeLog7
-rw-r--r--src/alloc.c4
-rw-r--r--src/lread.c5
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 @@
12013-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
12013-09-24 Paul Eggert <eggert@cs.ucla.edu> 82013-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) */)
3132void 3132void
3133make_byte_code (struct Lisp_Vector *v) 3133make_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 == '(')