]> code.delx.au - gnu-emacs/commitdiff
* lread.c (read1, init_obarray): Don't update size until alloc done.
authorPaul Eggert <eggert@cs.ucla.edu>
Fri, 29 Jul 2011 00:59:16 +0000 (17:59 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Fri, 29 Jul 2011 00:59:16 +0000 (17:59 -0700)
src/ChangeLog
src/lread.c

index f1c7f11c7f62adc0015e79334ae6a033bd311be5..24d67e2463e089b94ba2d7b922f711f0dd6ac6b6 100644 (file)
@@ -1,5 +1,7 @@
 2011-07-29  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * lread.c (read1, init_obarray): Don't update size until alloc done.
+
        * keymap.c: Integer overflow fixes.
        (cmm_size, current_minor_maps): Use ptrdiff_t, not int, to count maps.
        (current_minor_maps): Check for size calculation overflow.
index 0613ad037bfa6c2b16fd1dbc08665d8295807ab2..3703fdf5d3e36fcc00f441a34b3507853bf7d664 100644 (file)
@@ -2613,14 +2613,14 @@ read1 (register Lisp_Object readcharfun, int *pch, int first_in_list)
 
              if (saved_doc_string_size == 0)
                {
+                 saved_doc_string = (char *) xmalloc (nskip + extra);
                  saved_doc_string_size = nskip + extra;
-                 saved_doc_string = (char *) xmalloc (saved_doc_string_size);
                }
              if (nskip > saved_doc_string_size)
                {
-                 saved_doc_string_size = nskip + extra;
                  saved_doc_string = (char *) xrealloc (saved_doc_string,
-                                                       saved_doc_string_size);
+                                                       nskip + extra);
+                 saved_doc_string_size = nskip + extra;
                }
 
              saved_doc_string_position = file_tell (instream);
@@ -2880,7 +2880,8 @@ read1 (register Lisp_Object readcharfun, int *pch, int first_in_list)
                if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
                  memory_full (SIZE_MAX);
                read_buffer = (char *) xrealloc (read_buffer,
-                                                read_buffer_size *= 2);
+                                                read_buffer_size * 2);
+               read_buffer_size *= 2;
                p = read_buffer + offset;
                end = read_buffer + read_buffer_size;
              }
@@ -3023,7 +3024,8 @@ read1 (register Lisp_Object readcharfun, int *pch, int first_in_list)
                  if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
                    memory_full (SIZE_MAX);
                  read_buffer = (char *) xrealloc (read_buffer,
-                                                  read_buffer_size *= 2);
+                                                  read_buffer_size * 2);
+                 read_buffer_size *= 2;
                  p = read_buffer + offset;
                  end = read_buffer + read_buffer_size;
                }
@@ -3053,7 +3055,8 @@ read1 (register Lisp_Object readcharfun, int *pch, int first_in_list)
              if (min (PTRDIFF_MAX, SIZE_MAX) / 2 < read_buffer_size)
                memory_full (SIZE_MAX);
              read_buffer = (char *) xrealloc (read_buffer,
-                                              read_buffer_size *= 2);
+                                              read_buffer_size * 2);
+             read_buffer_size *= 2;
              p = read_buffer + offset;
              end = read_buffer + read_buffer_size;
            }
@@ -3935,6 +3938,7 @@ void
 init_obarray (void)
 {
   Lisp_Object oblength;
+  ptrdiff_t size = 100 + MAX_MULTIBYTE_LENGTH;
 
   XSETFASTINT (oblength, OBARRAY_SIZE);
 
@@ -3967,8 +3971,8 @@ init_obarray (void)
 
   DEFSYM (Qvariable_documentation, "variable-documentation");
 
-  read_buffer_size = 100 + MAX_MULTIBYTE_LENGTH;
-  read_buffer = (char *) xmalloc (read_buffer_size);
+  read_buffer = (char *) xmalloc (size);
+  read_buffer_size = size;
 }
 \f
 void