From e5e5034111debe060863901dbfe3728cc30d6441 Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 4 Jun 2015 11:37:05 +0000 Subject: I was checking a test app in valgrind and much to my surprise it was complaining about a memleak in libmicrohttpd. In check_argument_match() a buffer is allocated using strdup() but freed nowhere. I wouldn't have noticed this leak if it wasn't for valgrind because if a URI is requested without any arguments (my usual case) the buffer that gets allocated has 'only' a length of 1 byte, thus memory usage will build up very slowly over time. The patch attached fixes it. Btw. the indentation of that file is a mess, tabs and spaces are mixed :-| Regards, Andreas --- src/microhttpd/digestauth.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'src/microhttpd/digestauth.c') diff --git a/src/microhttpd/digestauth.c b/src/microhttpd/digestauth.c index 4cc7f61b..e69f58aa 100644 --- a/src/microhttpd/digestauth.c +++ b/src/microhttpd/digestauth.c @@ -508,7 +508,10 @@ check_argument_match (struct MHD_Connection *connection, connection, argp); if (MHD_YES != test_header (connection, argp, NULL)) - return MHD_NO; + { + free(argb); + return MHD_NO; + } num_headers++; break; } @@ -527,10 +530,16 @@ check_argument_match (struct MHD_Connection *connection, connection, equals); if (! test_header (connection, argp, equals)) - return MHD_NO; + { + free(argb); + return MHD_NO; + } + num_headers++; argp = amper; } + + free(argb); /* also check that the number of headers matches */ for (pos = connection->headers_received; NULL != pos; pos = pos->next) -- cgit v1.2.3