]> git.eshelyaron.com Git - emacs.git/commitdiff
Avoid crashes in read_integer
authorEli Zaretskii <eliz@gnu.org>
Sun, 5 May 2019 14:06:01 +0000 (17:06 +0300)
committerEli Zaretskii <eliz@gnu.org>
Sun, 5 May 2019 14:06:01 +0000 (17:06 +0300)
* src/lread.c (read_integer): Always allocate a buffer, since
we need to use it even when the radix is invalid.  (Bug#35576)

src/lread.c

index 1c97805ca7afecce00d62c4b9b6b15ee2425e895..c37719e0d2419e3e9fcd848eeb48c3697729f435 100644 (file)
@@ -2660,11 +2660,12 @@ read_integer (Lisp_Object readcharfun, EMACS_INT radix)
      Also, room for invalid syntax diagnostic.  */
   size_t len = max (1 + 1 + UINTMAX_WIDTH + 1,
                    sizeof "integer, radix " + INT_STRLEN_BOUND (EMACS_INT));
-  char *buf = NULL;
+  char *buf = xmalloc (len);
   char *p = buf;
   int valid = -1; /* 1 if valid, 0 if not, -1 if incomplete.  */
 
   ptrdiff_t count = SPECPDL_INDEX ();
+  record_unwind_protect_ptr (free_contents, &buf);
 
   if (radix < 2 || radix > 36)
     valid = 0;
@@ -2672,8 +2673,6 @@ read_integer (Lisp_Object readcharfun, EMACS_INT radix)
     {
       int c, digit;
 
-      buf = xmalloc (len);
-      record_unwind_protect_ptr (free_contents, &buf);
       p = buf;
 
       c = READCHAR;