]> git.ipfire.org Git - thirdparty/gettext.git/commitdiff
A paranoia check, merged from gnulib.
authorBruno Haible <bruno@clisp.org>
Sat, 27 Dec 2003 15:29:47 +0000 (15:29 +0000)
committerBruno Haible <bruno@clisp.org>
Tue, 23 Jun 2009 10:11:32 +0000 (12:11 +0200)
gettext-runtime/libasprintf/ChangeLog
gettext-runtime/libasprintf/vasprintf.c

index b14eb194d72e43f7559459269b36e8d4b7fdb5d4..78c7b596cfa8f7959bb79328bcd751699b0fd1d7 100644 (file)
@@ -1,3 +1,9 @@
+2003-10-30  Paul Eggert  <eggert@twinsun.com>
+            Bruno Haible  <bruno@clisp.org>
+
+       * vasprintf.c: Include <limits.h>, <stdlib.h>.
+       (vasprintf): Fail if the resulting length doesn't fit in an 'int'.
+
 2003-12-12  Bruno Haible  <bruno@clisp.org>
 
        Assume automake-1.8.
index 925d2fb81869fad156ee733851e15089e66278b9..d20f8ca6319bcbec2b2090409db72faf91193b3a 100644 (file)
@@ -23,6 +23,9 @@
 /* Specification.  */
 #include "vasprintf.h"
 
+#include <limits.h>
+#include <stdlib.h>
+
 #include "vasnprintf.h"
 
 int
@@ -32,6 +35,14 @@ vasprintf (char **resultp, const char *format, va_list args)
   char *result = vasnprintf (NULL, &length, format, args);
   if (result == NULL)
     return -1;
+  if (length > INT_MAX)
+    {
+      /* We could produce such a big string, but can't return its length
+        as an 'int'.  */
+      free (result);
+      return -1;
+    }
+
   *resultp = result;
   /* Return the number of resulting bytes, excluding the trailing NUL.  */
   return length;