From d455bd1bd7ce69d9886f1ff5d359bd3f349deca9 Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Wed, 17 Apr 2013 01:38:59 -0700 Subject: [PATCH] Fixed bug 1805 - Memory Leak issue in src/video/x11/edid-parse.c file Nitz In Function, MonitorInfo * decode_edid (const uchar *edid) In this function "info" is going out of scope and leaks the storage it points to, if the first if condition get true: if (!decode_header (edid)) return NULL; So while returning from this if statement there should be free for "info" pointer. --- src/video/x11/edid-parse.c | 32 ++++++++++---------------------- 1 file changed, 10 insertions(+), 22 deletions(-) diff --git a/src/video/x11/edid-parse.c b/src/video/x11/edid-parse.c index 67e17e167..8608bf254 100644 --- a/src/video/x11/edid-parse.c +++ b/src/video/x11/edid-parse.c @@ -524,29 +524,17 @@ decode_edid (const uchar *edid) decode_check_sum (edid, info); - if (!decode_header (edid)) - return NULL; - - if (!decode_vendor_and_product_identification (edid, info)) - return NULL; - - if (!decode_edid_version (edid, info)) - return NULL; - - if (!decode_display_parameters (edid, info)) - return NULL; - - if (!decode_color_characteristics (edid, info)) - return NULL; - - if (!decode_established_timings (edid, info)) - return NULL; - - if (!decode_standard_timings (edid, info)) - return NULL; - - if (!decode_descriptors (edid, info)) + if (!decode_header (edid) || + !decode_vendor_and_product_identification (edid, info) || + !decode_edid_version (edid, info) || + !decode_display_parameters (edid, info) || + !decode_color_characteristics (edid, info) || + !decode_established_timings (edid, info) || + !decode_standard_timings (edid, info) || + !decode_descriptors (edid, info)) { + free(info); return NULL; + } return info; }