From ee7eb520d247d457fe61bcbb0f1f009a889126ed Mon Sep 17 00:00:00 2001 From: Ralph Corderoy Date: Tue, 12 Sep 2017 13:20:56 +0100 Subject: [PATCH] mime_type(): Don't leak memory allocated by get_file_info(). Fixes b4f2851d4. --- sbr/mime_type.c | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/sbr/mime_type.c b/sbr/mime_type.c index a640110a..0bfc3377 100644 --- a/sbr/mime_type.c +++ b/sbr/mime_type.c @@ -33,17 +33,13 @@ mime_type(const char *file_name) { /* Try to append charset for text content. */ char *mimeencoding; - if (strncasecmp(mimetype, "text", 4) == 0) { - if ((mimeencoding = get_file_info(MIMEENCODINGPROC, file_name))) { - content_type = concat(mimetype, "; charset=", mimeencoding, - NULL); - free (mimetype); - } else { - content_type = mimetype; - } - } else { + if (!strncasecmp(mimetype, "text", 4) && + (mimeencoding = get_file_info(MIMEENCODINGPROC, file_name))) { + content_type = concat(mimetype, "; charset=", mimeencoding, NULL); + free(mimeencoding); + free(mimetype); + } else content_type = mimetype; - } #else /* MIMEENCODINGPROC */ content_type = mimetype; #endif /* MIMEENCODINGPROC */ @@ -112,7 +108,7 @@ mime_type(const char *file_name) { #ifdef MIMETYPEPROC /* * Get information using proc about a file. - */ + * Non-null return value must be free(3)'d. */ static char * get_file_info(const char *proc, const char *file_name) { -- 2.56.0