+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-11 Micah Cowan <micah@cowan.name>
* ftp.c (getftp, ftp_loop_internal): Don't append to an existing
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, */
+ logprintf (LOG_ALWAYS,
+ _("%s: aprintf: text buffer is too big (%ld bytes), \
+free already allocated memory and abort.\n"),
+ exec_name, size); /* printout a log message */
+ abort (); /* and abort... */
+ }
+ /* else, we continue to grow our buffer. */
+ size <<= 1; /* twice the old size */
+ }
str = xrealloc (str, size);
}
#endif /* not HAVE_VASPRINTF */