+2008-04-11 Alexander Dergachev <cy6erbr4in@gmail.com>
+
+ * utils.c (aprintf): Now we are setting limits (1 Mb) for text
+ buffer when we use non-C99 vsnprintf.
+
2008-04-10 Alexander Dergachev <cy6erbr4in@gmail.com>
* xmalloc.c, xmalloc.h (memfatal): Now exported; accepts an
vsnprintf until the correct size is found. Since Wget also ships a
fallback implementation of vsnprintf, this should be portable. */
+/* Constant is using for limits memory allocation for text buffer.
+ Applicable in situation when: vasprintf is not available in the system
+ and vsnprintf return -1 when long line is truncated (in old versions of
+ glibc and in other system where C99 doesn`t support) */
+
+#define FMT_MAX_LENGTH 1048576
+
char *
aprintf (const char *fmt, ...)
{
if (n > -1) /* C99 */
size = n + 1; /* precisely what is needed */
else
- size <<= 1; /* twice the old size */
+ {
+ if (size >= FMT_MAX_LENGTH) /* We have a huge buffer, */
+ { /* maybe we have some wrong format string? */
+ free (str); /* In this case we must free already allocated memory, */
+ return NULL; /* and return NULL pointer... */
+ }
+ /* else, we continue to grow our buffer. */
+ size <<= 1; /* twice the old size */
+ }
str = xrealloc (str, size);
}
#endif /* not HAVE_VASPRINTF */