aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert2011-07-28 17:59:16 -0700
committerPaul Eggert2011-07-28 17:59:16 -0700
commit37d0112bcfc0b2fb426821afc9d409236acab381 (patch)
tree7d0dc0f0bca230cc637cd20b9865f52a9e0cbbfd /src
parentdbe2216bb632ae0bec0cb2c1b0e38454b9d3a753 (diff)
downloademacs-37d0112bcfc0b2fb426821afc9d409236acab381.tar.gz
emacs-37d0112bcfc0b2fb426821afc9d409236acab381.zip
* lread.c (read1, init_obarray): Don't update size until alloc done.
Diffstat (limited to 'src')
-rw-r--r--src/ChangeLog2
-rw-r--r--src/lread.c20
2 files changed, 14 insertions, 8 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index f1c7f11c7f6..24d67e2463e 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,7 @@
12011-07-29 Paul Eggert <eggert@cs.ucla.edu> 12011-07-29 Paul Eggert <eggert@cs.ucla.edu>
2 2
3 * lread.c (read1, init_obarray): Don't update size until alloc done.
4
3 * keymap.c: Integer overflow fixes. 5 * keymap.c: Integer overflow fixes.
4 (cmm_size, current_minor_maps): Use ptrdiff_t, not int, to count maps. 6 (cmm_size, current_minor_maps): Use ptrdiff_t, not int, to count maps.
5 (current_minor_maps): Check for size calculation overflow. 7 (current_minor_maps): Check for size calculation overflow.
diff --git a/src/lread.c b/src/lread.c
index 0613ad037bf..3703fdf5d3e 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -2613,14 +2613,14 @@ read1 (register Lisp_Object readcharfun, int *pch, int first_in_list)
2613 2613
2614 if (saved_doc_string_size == 0) 2614 if (saved_doc_string_size == 0)
2615 { 2615 {
2616 saved_doc_string = (char *) xmalloc (nskip + extra);
2616 saved_doc_string_size = nskip + extra; 2617 saved_doc_string_size = nskip + extra;
2617 saved_doc_string = (char *) xmalloc (saved_doc_string_size);
2618 } 2618 }
2619 if (nskip > saved_doc_string_size) 2619 if (nskip > saved_doc_string_size)
2620 { 2620 {
2621 saved_doc_string_size = nskip + extra;
2622 saved_doc_string = (char *) xrealloc (saved_doc_string, 2621 saved_doc_string = (char *) xrealloc (saved_doc_string,
2623 saved_doc_string_size); 2622 nskip + extra);
2623 saved_doc_string_size = nskip + extra;
2624 } 2624 }
2625 2625
2626 saved_doc_string_position = file_tell (instream); 2626 saved_doc_string_position = file_tell (instream);
@@ -2880,7 +2880,8 @@ read1 (register Lisp_Object readcharfun, int *pch, int first_in_list)
2880 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size) 2880 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
2881 memory_full (SIZE_MAX); 2881 memory_full (SIZE_MAX);
2882 read_buffer = (char *) xrealloc (read_buffer, 2882 read_buffer = (char *) xrealloc (read_buffer,
2883 read_buffer_size *= 2); 2883 read_buffer_size * 2);
2884 read_buffer_size *= 2;
2884 p = read_buffer + offset; 2885 p = read_buffer + offset;
2885 end = read_buffer + read_buffer_size; 2886 end = read_buffer + read_buffer_size;
2886 } 2887 }
@@ -3023,7 +3024,8 @@ read1 (register Lisp_Object readcharfun, int *pch, int first_in_list)
3023 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size) 3024 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
3024 memory_full (SIZE_MAX); 3025 memory_full (SIZE_MAX);
3025 read_buffer = (char *) xrealloc (read_buffer, 3026 read_buffer = (char *) xrealloc (read_buffer,
3026 read_buffer_size *= 2); 3027 read_buffer_size * 2);
3028 read_buffer_size *= 2;
3027 p = read_buffer + offset; 3029 p = read_buffer + offset;
3028 end = read_buffer + read_buffer_size; 3030 end = read_buffer + read_buffer_size;
3029 } 3031 }
@@ -3053,7 +3055,8 @@ read1 (register Lisp_Object readcharfun, int *pch, int first_in_list)
3053 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size) 3055 if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
3054 memory_full (SIZE_MAX); 3056 memory_full (SIZE_MAX);
3055 read_buffer = (char *) xrealloc (read_buffer, 3057 read_buffer = (char *) xrealloc (read_buffer,
3056 read_buffer_size *= 2); 3058 read_buffer_size * 2);
3059 read_buffer_size *= 2;
3057 p = read_buffer + offset; 3060 p = read_buffer + offset;
3058 end = read_buffer + read_buffer_size; 3061 end = read_buffer + read_buffer_size;
3059 } 3062 }
@@ -3935,6 +3938,7 @@ void
3935init_obarray (void) 3938init_obarray (void)
3936{ 3939{
3937 Lisp_Object oblength; 3940 Lisp_Object oblength;
3941 ptrdiff_t size = 100 + MAX_MULTIBYTE_LENGTH;
3938 3942
3939 XSETFASTINT (oblength, OBARRAY_SIZE); 3943 XSETFASTINT (oblength, OBARRAY_SIZE);
3940 3944
@@ -3967,8 +3971,8 @@ init_obarray (void)
3967 3971
3968 DEFSYM (Qvariable_documentation, "variable-documentation"); 3972 DEFSYM (Qvariable_documentation, "variable-documentation");
3969 3973
3970 read_buffer_size = 100 + MAX_MULTIBYTE_LENGTH; 3974 read_buffer = (char *) xmalloc (size);
3971 read_buffer = (char *) xmalloc (read_buffer_size); 3975 read_buffer_size = size;
3972} 3976}
3973 3977
3974void 3978void