* lisp.h (SAFE_ALLOCA, SAFE_ALLOCA_LISP): Avoid 'int' overflow
authorPaul Eggert <eggert@cs.ucla.edu>
Tue, 22 Mar 2011 09:08:11 +0000 (02:08 -0700)
committerPaul Eggert <eggert@cs.ucla.edu>
Tue, 22 Mar 2011 09:08:11 +0000 (02:08 -0700)
leading to a memory leak, possible in functions like
load_charset_map_from_file that can allocate an unbounded number
of objects.

src/ChangeLog
src/lisp.h

index c8fa1e5..a341d1b 100644 (file)
@@ -1,5 +1,10 @@
 2011-03-22  Paul Eggert  <eggert@cs.ucla.edu>
 
+       * lisp.h (SAFE_ALLOCA, SAFE_ALLOCA_LISP): Avoid 'int' overflow
+       leading to a memory leak, possible in functions like
+       load_charset_map_from_file that can allocate an unbounded number
+       of objects.
+
        * xmenu.c (set_frame_menubar): Use EMACS_UINT, not int, for indexes
        that could (at least in theory) be that large.
 
index 645b82c..e98172e 100644 (file)
@@ -3602,7 +3602,7 @@ extern Lisp_Object safe_alloca_unwind (Lisp_Object);
     else                                                 \
       {                                                          \
        buf = (type) xmalloc (size);                      \
-       sa_must_free++;                                   \
+       sa_must_free = 1;                                 \
        record_unwind_protect (safe_alloca_unwind,        \
                               make_save_value (buf, 0)); \
       }                                                          \
@@ -3632,7 +3632,7 @@ extern Lisp_Object safe_alloca_unwind (Lisp_Object);
        buf = (Lisp_Object *) xmalloc (size_);            \
        arg_ = make_save_value (buf, nelt);               \
        XSAVE_VALUE (arg_)->dogc = 1;                     \
-       sa_must_free++;                                   \
+       sa_must_free = 1;                                 \
        record_unwind_protect (safe_alloca_unwind, arg_); \
       }                                                          \
   } while (0)