summaryrefslogtreecommitdiff
path: root/libopenjpeg/jp2.c
diff options
context:
space:
mode:
authorAntonin Descampe <antonin@gmail.com>2010-11-25 12:15:07 +0000
committerAntonin Descampe <antonin@gmail.com>2010-11-25 12:15:07 +0000
commita916dcd052695d0e7dd3b919eafd00f35fd824a7 (patch)
tree24412324bb51c829b9d6b58dc8af8bdc5fb0f42d /libopenjpeg/jp2.c
parentcc01949777e56db1cb1bb2fd3809e2963da6efa3 (diff)
Fix leak in jp2_read_header_procedure() (from even.rouault, see issue 29 on googlecode)
Diffstat (limited to 'libopenjpeg/jp2.c')
-rw-r--r--libopenjpeg/jp2.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/libopenjpeg/jp2.c b/libopenjpeg/jp2.c
index a9e3975e..2de3eafa 100644
--- a/libopenjpeg/jp2.c
+++ b/libopenjpeg/jp2.c
@@ -525,11 +525,13 @@ bool jp2_read_header_procedure(
(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");
+ opj_free(l_current_data);
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");
+ opj_free(l_current_data);
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))
{
+ opj_free(l_current_data);
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_free(l_current_data);
return false;
}
}
}
+
+ opj_free(l_current_data);
+
return true;
}