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)

Attachment: pgpwrMcXELdv9.pgp
Description: PGP signature

_______________________________________________
elinks-dev mailing list
elinks-dev@linuxfromscratch.org
http://linuxfromscratch.org/mailman/listinfo/elinks-dev

Reply via email to