jpegdec: don't leak output buffers on decoding errors
authorStefan Kost <ensonic@users.sf.net>
Tue, 29 Sep 2009 14:51:04 +0000 (17:51 +0300)
committerStefan Kost <ensonic@users.sf.net>
Wed, 30 Sep 2009 06:19:48 +0000 (09:19 +0300)
The setjmp handles libjpeg error. Free the outputbffer if we don't need it.

ext/jpeg/gstjpegdec.c

index bb3961d9ec3a8e20fa241f12e5ce1e67154dfab6..1d2d4dd77e77755f8759a58d61c94d0e0dfb669a 100644 (file)
@@ -850,7 +850,7 @@ gst_jpeg_dec_chain (GstPad * pad, GstBuffer * buf)
 {
   GstFlowReturn ret = GST_FLOW_OK;
   GstJpegDec *dec;
-  GstBuffer *outbuf;
+  GstBuffer *outbuf = NULL;
   guchar *data, *outdata;
   guchar *base[3], *last[3];
   guint img_len, outsize;
@@ -1143,6 +1143,10 @@ exit:
 need_more_data:
   {
     GST_LOG_OBJECT (dec, "we need more data");
+    if (outbuf) {
+      gst_buffer_unref (outbuf);
+      outbuf = NULL;
+    }
     ret = GST_FLOW_OK;
     goto exit;
   }
@@ -1160,6 +1164,10 @@ decode_error:
     GST_ELEMENT_ERROR (dec, STREAM, DECODE,
         (_("Failed to decode JPEG image")),
         ("Error #%u: %s", code, dec->jerr.pub.jpeg_message_table[code]));
+    if (outbuf) {
+      gst_buffer_unref (outbuf);
+      outbuf = NULL;
+    }
     ret = GST_FLOW_ERROR;
     goto done;
   }