From: Felipe Pena Date: Wed, 27 Aug 2008 00:16:11 +0000 (+0000) Subject: - Fixed crash in file_error_core() X-Git-Tag: BEFORE_HEAD_NS_CHANGE~558 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=4eaaf7be8371fb7ac0370d6cd30f28050f4b9b24;p=php - Fixed crash in file_error_core() --- diff --git a/ext/fileinfo/libmagic/funcs.c b/ext/fileinfo/libmagic/funcs.c index 22e277b611..b891679510 100644 --- a/ext/fileinfo/libmagic/funcs.c +++ b/ext/fileinfo/libmagic/funcs.c @@ -52,7 +52,6 @@ protected int file_printf(struct magic_set *ms, const char *fmt, ...) { va_list ap; - size_t size; int len; char *buf = NULL, *newstr; @@ -81,17 +80,32 @@ private void file_error_core(struct magic_set *ms, int error, const char *f, va_list va, uint32_t lineno) { + char *buf = NULL; + /* Only the first error is ok */ - if (ms->haderr) + if (ms->haderr) { return; + } + if (lineno != 0) { efree(ms->o.buf); ms->o.buf = NULL; file_printf(ms, "line %u: ", lineno); } - file_printf(ms, f, va); - if (error > 0) - file_printf(ms, " (%s)", strerror(error)); + + vspprintf(&buf, 0, f, va); + va_end(va); + + if (error > 0) { + file_printf(ms, "%s (%s)", (*buf ? buf : ""), strerror(error)); + } else if (*buf) { + file_printf(ms, "%s", buf); + } + + if (buf) { + efree(buf); + } + ms->haderr++; ms->error = error; }