]> granicus.if.org Git - openjpeg/commitdiff
WIP: remove memory leak about new jp2_read_marker function
authorMickael Savinaud <savmickael@users.noreply.github.com>
Thu, 20 Oct 2011 13:18:52 +0000 (13:18 +0000)
committerMickael Savinaud <savmickael@users.noreply.github.com>
Thu, 20 Oct 2011 13:18:52 +0000 (13:18 +0000)
CHANGES
libopenjpeg/j2k.c
libopenjpeg/jp2.c

diff --git a/CHANGES b/CHANGES
index 09d6ee51e3d6c8778af0edda5e1dcd950fc5e1d8..98ba1377873cae26b1dec2dbdaba957229ccb716 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -6,6 +6,7 @@ What's New for OpenJPEG
 + : added
 
 October 20, 2011
+* [mickael] WIP: remove memory leak about new jp2_read_marker function
 * [mickael] WIP: remove previous commit about memory leak with ppm read function
 * [mickael] WIP: solve memory leak with ppm read function
 
index e3e4c4987f606c5ae6207d1a5427da35be67f899..263713b7472066b8eb811ca186c9fabdb147a13e 100644 (file)
@@ -7716,6 +7716,7 @@ opj_bool j2k_decode_tiles (       opj_j2k_v2_t *p_j2k,
                                                                        &l_go_on,
                                                                        p_stream,
                                                                        p_manager)) {
+                       opj_free(l_current_data);
                        return OPJ_FALSE;
                }
 
index ed7c79f686bf05f64deb98a5ec510cf4ea45a681..ee9131408626ecc6eedc0d3f66345dc1ee007aa0 100644 (file)
@@ -2570,11 +2570,33 @@ void jp2_destroy(opj_jp2_v2_t *jp2)
                }
 
                if (jp2->color.jp2_cdef) {
+                       if (jp2->color.jp2_cdef->info) {
+                               opj_free(jp2->color.jp2_cdef->info);
+                               jp2->color.jp2_cdef->info = NULL;
+                       }
+
                        opj_free(jp2->color.jp2_cdef);
                        jp2->color.jp2_cdef = 00;
                }
 
                if (jp2->color.jp2_pclr) {
+                       if (jp2->color.jp2_pclr->cmap) {
+                               opj_free(jp2->color.jp2_pclr->cmap);
+                               jp2->color.jp2_pclr->cmap = NULL;
+                       }
+                       if (jp2->color.jp2_pclr->channel_sign) {
+                               opj_free(jp2->color.jp2_pclr->channel_sign);
+                               jp2->color.jp2_pclr->channel_sign = NULL;
+                       }
+                       if (jp2->color.jp2_pclr->channel_size) {
+                               opj_free(jp2->color.jp2_pclr->channel_size);
+                               jp2->color.jp2_pclr->channel_size = NULL;
+                       }
+                       if (jp2->color.jp2_pclr->entries) {
+                               opj_free(jp2->color.jp2_pclr->entries);
+                               jp2->color.jp2_pclr->entries = NULL;
+                       }
+
                        opj_free(jp2->color.jp2_pclr);
                        jp2->color.jp2_pclr = 00;
                }