Fix leak in jp2_read_header_procedure() (from even.rouault, see issue 29 on googlecode)
authorAntonin Descampe <antonin@gmail.com>
Thu, 25 Nov 2010 12:15:07 +0000 (12:15 +0000)
committerAntonin Descampe <antonin@gmail.com>
Thu, 25 Nov 2010 12:15:07 +0000 (12:15 +0000)
ChangeLog
libopenjpeg/jp2.c

index 5113f16ce2e3735d1f10d14c1e2fe27c14f00d86..0c15de01a5139d500e35bf42ee05d751735e43d0 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,9 @@ What's New for OpenJPEG
 ! : changed
 + : added
 
 ! : changed
 + : added
 
+November 25, 2010
+* [antonin] Fix leak in jp2_read_header_procedure() (from even.rouault, see issue 29 on googlecode)
+
 Jun 22, 2010
 + [MM] Import j2k_dump from trunk (much faster!)
 
 Jun 22, 2010
 + [MM] Import j2k_dump from trunk (much faster!)
 
index a9e3975e21ae39821f626cbcafb3f0186b716095..2de3eafacafcc740839882c8ff7ef49ef45474ad 100644 (file)
@@ -525,11 +525,13 @@ bool jp2_read_header_procedure(
                                (jp2->jp2_state & JP2_STATE_HEADER)
                        {
                                jp2->jp2_state |= JP2_STATE_CODESTREAM;
                                (jp2->jp2_state & JP2_STATE_HEADER)
                        {
                                jp2->jp2_state |= JP2_STATE_CODESTREAM;
+                                opj_free(l_current_data);
                                return true;
                        }
                        else
                        {
                                opj_event_msg(p_manager, EVT_ERROR, "bad placed jpeg codestream\n");
                                return true;
                        }
                        else
                        {
                                opj_event_msg(p_manager, EVT_ERROR, "bad placed jpeg codestream\n");
+                                opj_free(l_current_data);
                                return false;
                        }
                }
                                return false;
                        }
                }
@@ -537,6 +539,7 @@ bool jp2_read_header_procedure(
                        (box.length == 0)
                {
                        opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box of undefined sizes\n");
                        (box.length == 0)
                {
                        opj_event_msg(p_manager, EVT_ERROR, "Cannot handle box of undefined sizes\n");
+                        opj_free(l_current_data);
                        return false;
                }
 
                        return false;
                }
 
@@ -562,6 +565,7 @@ bool jp2_read_header_procedure(
                        if
                                (! l_current_handler->handler(jp2,l_current_data,l_current_data_size,p_manager))
                        {
                        if
                                (! l_current_handler->handler(jp2,l_current_data,l_current_data_size,p_manager))
                        {
+                                opj_free(l_current_data);
                                return false;
                        }
                }
                                return false;
                        }
                }
@@ -572,10 +576,14 @@ bool jp2_read_header_procedure(
                                (opj_stream_skip(cio,l_current_data_size,p_manager) != l_current_data_size)
                        {
                                opj_event_msg(p_manager, EVT_ERROR, "Problem with skipping JPEG2000 box, stream error\n");
                                (opj_stream_skip(cio,l_current_data_size,p_manager) != l_current_data_size)
                        {
                                opj_event_msg(p_manager, EVT_ERROR, "Problem with skipping JPEG2000 box, stream error\n");
+                                opj_free(l_current_data);
                                return false;
                        }
                }
        }
                                return false;
                        }
                }
        }
+        
+        opj_free(l_current_data);
+        
        return true;
 }
 
        return true;
 }