From 1ef7dfce3d4f60de760dd4ba13fe5325ca009592 Mon Sep 17 00:00:00 2001 From: Felipe Pena Date: Wed, 27 Aug 2008 00:17:27 +0000 Subject: [PATCH] - MFH: Fixed crash in file_error_core() --- ext/fileinfo/libmagic/funcs.c | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) 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; } -- 2.40.0