X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fvasprintf.c;h=4a84468bab071a99ae53cf992f7f56a6400c0746;hb=c50edd6462eaaae00f8549f9bad99d4e68b94376;hp=925d2fb81869fad156ee733851e15089e66278b9;hpb=87b04f998fd3e668027074b5b5d37205d3cdfec3;p=gnulib.git
diff --git a/lib/vasprintf.c b/lib/vasprintf.c
index 925d2fb81..4a84468ba 100644
--- a/lib/vasprintf.c
+++ b/lib/vasprintf.c
@@ -1,27 +1,31 @@
/* Formatted output to strings.
- Copyright (C) 1999, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1999, 2002, 2006-2013 Free Software Foundation, Inc.
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU Library General Public License as published
- by the Free Software Foundation; either version 2, or (at your option)
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU Library General Public
- License along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
- USA. */
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, see . */
-#ifdef HAVE_CONFIG_H
-# include
-#endif
+#include
/* Specification. */
-#include "vasprintf.h"
+#ifdef IN_LIBASPRINTF
+# include "vasprintf.h"
+#else
+# include
+#endif
+
+#include
+#include
+#include
#include "vasnprintf.h"
@@ -32,6 +36,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)
+ {
+ free (result);
+ errno = EOVERFLOW;
+ return -1;
+ }
+
*resultp = result;
/* Return the number of resulting bytes, excluding the trailing NUL. */
return length;