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 [email protected] http://linuxfromscratch.org/mailman/listinfo/elinks-dev
