jpegdec: fix output state memory leak
authorVineeth TM <vineeth.tm@samsung.com>
Thu, 6 Aug 2015 03:44:20 +0000 (12:44 +0900)
committerThiago Santos <thiagoss@osg.samsung.com>
Tue, 10 Nov 2015 10:54:08 +0000 (07:54 -0300)
When jpeg_finish_decompress is called, output state reference is being created.
But if there is any failures in finishing decompress, it jumps to setjmp,
and at that point state was not referenced. Resulting in leak of output state.
Hence adding another setjmp after output state is referenced.
Similarly adding another setjmp to unmap the frame in case error happens before
finish_decompress

https://bugzilla.gnome.org/show_bug.cgi?id=753087

ext/jpeg/gstjpegdec.c

index d67f1de77ab6b100551fc68db3d0542f3f967080..edf616e3d6e3849996e790ae0a49d95abff601ca 100644 (file)
@@ -1108,6 +1108,12 @@ gst_jpeg_dec_handle_frame (GstVideoDecoder * bdec, GstVideoCodecFrame * frame)
           GST_MAP_READWRITE))
     goto alloc_failed;
 
+  if (setjmp (dec->jerr.setjmp_buffer)) {
+    code = dec->jerr.pub.msg_code;
+    gst_video_frame_unmap (&vframe);
+    goto decode_error;
+  }
+
   GST_LOG_OBJECT (dec, "width %d, height %d", width, height);
 
   if (dec->cinfo.jpeg_color_space == JCS_RGB) {
@@ -1141,6 +1147,11 @@ gst_jpeg_dec_handle_frame (GstVideoDecoder * bdec, GstVideoCodecFrame * frame)
 
   gst_video_frame_unmap (&vframe);
 
+  if (setjmp (dec->jerr.setjmp_buffer)) {
+    code = dec->jerr.pub.msg_code;
+    goto decode_error;
+  }
+
   GST_LOG_OBJECT (dec, "decompressing finished");
   jpeg_finish_decompress (&dec->cinfo);