diff options
| author | Paul Eggert | 2011-07-28 17:59:16 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-07-28 17:59:16 -0700 |
| commit | 37d0112bcfc0b2fb426821afc9d409236acab381 (patch) | |
| tree | 7d0dc0f0bca230cc637cd20b9865f52a9e0cbbfd /src | |
| parent | dbe2216bb632ae0bec0cb2c1b0e38454b9d3a753 (diff) | |
| download | emacs-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/ChangeLog | 2 | ||||
| -rw-r--r-- | src/lread.c | 20 |
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 @@ | |||
| 1 | 2011-07-29 Paul Eggert <eggert@cs.ucla.edu> | 1 | 2011-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 | |||
| 3935 | init_obarray (void) | 3938 | init_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 | ||
| 3974 | void | 3978 | void |