diff options
| author | Paul Eggert | 2011-07-28 18:00:29 -0700 |
|---|---|---|
| committer | Paul Eggert | 2011-07-28 18:00:29 -0700 |
| commit | c86960f076fd12d743da2b30768323efb9c22bbf (patch) | |
| tree | 06bc9542c000a75b2114bd58460c68c04c652530 /src | |
| parent | 37d0112bcfc0b2fb426821afc9d409236acab381 (diff) | |
| download | emacs-c86960f076fd12d743da2b30768323efb9c22bbf.tar.gz emacs-c86960f076fd12d743da2b30768323efb9c22bbf.zip | |
* macros.c: Integer and memory overflow fixes.
(Fstart_kbd_macro): Don't update size until alloc done.
(store_kbd_macro_char): Reorder multiplicands to avoid overflow.
Diffstat (limited to 'src')
| -rw-r--r-- | src/ChangeLog | 4 | ||||
| -rw-r--r-- | src/macros.c | 4 |
2 files changed, 6 insertions, 2 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 24d67e2463e..435d883e14f 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,5 +1,9 @@ | |||
| 1 | 2011-07-29 Paul Eggert <eggert@cs.ucla.edu> | 1 | 2011-07-29 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 2 | ||
| 3 | * macros.c: Integer and memory overflow fixes. | ||
| 4 | (Fstart_kbd_macro): Don't update size until alloc done. | ||
| 5 | (store_kbd_macro_char): Reorder multiplicands to avoid overflow. | ||
| 6 | |||
| 3 | * lread.c (read1, init_obarray): Don't update size until alloc done. | 7 | * lread.c (read1, init_obarray): Don't update size until alloc done. |
| 4 | 8 | ||
| 5 | * keymap.c: Integer overflow fixes. | 9 | * keymap.c: Integer overflow fixes. |
diff --git a/src/macros.c b/src/macros.c index 60f30c3fbbe..f6cd3a3ccad 100644 --- a/src/macros.c +++ b/src/macros.c | |||
| @@ -62,9 +62,9 @@ macro before appending to it. */) | |||
| 62 | 62 | ||
| 63 | if (!current_kboard->kbd_macro_buffer) | 63 | if (!current_kboard->kbd_macro_buffer) |
| 64 | { | 64 | { |
| 65 | current_kboard->kbd_macro_bufsize = 30; | ||
| 66 | current_kboard->kbd_macro_buffer | 65 | current_kboard->kbd_macro_buffer |
| 67 | = (Lisp_Object *)xmalloc (30 * sizeof (Lisp_Object)); | 66 | = (Lisp_Object *)xmalloc (30 * sizeof (Lisp_Object)); |
| 67 | current_kboard->kbd_macro_bufsize = 30; | ||
| 68 | } | 68 | } |
| 69 | update_mode_lines++; | 69 | update_mode_lines++; |
| 70 | if (NILP (append)) | 70 | if (NILP (append)) |
| @@ -202,7 +202,7 @@ store_kbd_macro_char (Lisp_Object c) | |||
| 202 | if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof *kb->kbd_macro_buffer / 2 | 202 | if (min (PTRDIFF_MAX, SIZE_MAX) / sizeof *kb->kbd_macro_buffer / 2 |
| 203 | < kb->kbd_macro_bufsize) | 203 | < kb->kbd_macro_bufsize) |
| 204 | memory_full (SIZE_MAX); | 204 | memory_full (SIZE_MAX); |
| 205 | nbytes = kb->kbd_macro_bufsize * 2 * sizeof *kb->kbd_macro_buffer; | 205 | nbytes = kb->kbd_macro_bufsize * (2 * sizeof *kb->kbd_macro_buffer); |
| 206 | kb->kbd_macro_buffer | 206 | kb->kbd_macro_buffer |
| 207 | = (Lisp_Object *) xrealloc (kb->kbd_macro_buffer, nbytes); | 207 | = (Lisp_Object *) xrealloc (kb->kbd_macro_buffer, nbytes); |
| 208 | kb->kbd_macro_bufsize *= 2; | 208 | kb->kbd_macro_bufsize *= 2; |