Alexey Tourbin <[EMAIL PROTECTED]> writes: > + rv = vasprintf((char **) &buf, fmt, params); > + if (rv < 0) > + buf = fmt; > va_end(params); > elinks_internal("assertion failed: %s", buf); > if (buf) free(buf);
It can then call free(fmt) and probably get a SIGSEGV. Would you be happy with the following? diff --git a/src/util/error.c b/src/util/error.c index 34e4c88..4e6afe5 100644 --- a/src/util/error.c +++ b/src/util/error.c @@ -147,17 +147,17 @@ elinks_assertm(int x, unsigned char *fmt, ...) unsigned char *buf = NULL; va_list params; if (assert_failed) return; if (!(assert_failed = !x)) return; va_start(params, fmt); - vasprintf((char **) &buf, fmt, params); + (void) vasprintf((char **) &buf, fmt, params); va_end(params); - elinks_internal("assertion failed: %s", buf); + elinks_internal("assertion failed: %s", buf ? buf : fmt); if (buf) free(buf); } #ifdef CONFIG_DEBUG void force_dump(void)
pgpwrMcXELdv9.pgp
Description: PGP signature
_______________________________________________ elinks-dev mailing list elinks-dev@linuxfromscratch.org http://linuxfromscratch.org/mailman/listinfo/elinks-dev