summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStefan Kost <ensonic@users.sf.net>2009-09-29 17:51:04 +0300
committerStefan Kost <ensonic@users.sf.net>2009-09-30 09:19:48 +0300
commitb1feeee166b316689f1a3020d7ef37146fbf2ef1 (patch)
treefb6bee46c546cf79c5ad367f18f22b49bb6abc8f
parent477cb58640f1bd07317f1b54148338b75cb2b1fa (diff)
jpegdec: don't leak output buffers on decoding errors
The setjmp handles libjpeg error. Free the outputbffer if we don't need it.
-rw-r--r--ext/jpeg/gstjpegdec.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/ext/jpeg/gstjpegdec.c b/ext/jpeg/gstjpegdec.c
index bb3961d9e..1d2d4dd77 100644
--- a/ext/jpeg/gstjpegdec.c
+++ b/ext/jpeg/gstjpegdec.c
@@ -850,7 +850,7 @@ gst_jpeg_dec_chain (GstPad * pad, GstBuffer * buf)
850{ 850{
851 GstFlowReturn ret = GST_FLOW_OK; 851 GstFlowReturn ret = GST_FLOW_OK;
852 GstJpegDec *dec; 852 GstJpegDec *dec;
853 GstBuffer *outbuf; 853 GstBuffer *outbuf = NULL;
854 guchar *data, *outdata; 854 guchar *data, *outdata;
855 guchar *base[3], *last[3]; 855 guchar *base[3], *last[3];
856 guint img_len, outsize; 856 guint img_len, outsize;
@@ -1143,6 +1143,10 @@ exit:
1143need_more_data: 1143need_more_data:
1144 { 1144 {
1145 GST_LOG_OBJECT (dec, "we need more data"); 1145 GST_LOG_OBJECT (dec, "we need more data");
1146 if (outbuf) {
1147 gst_buffer_unref (outbuf);
1148 outbuf = NULL;
1149 }
1146 ret = GST_FLOW_OK; 1150 ret = GST_FLOW_OK;
1147 goto exit; 1151 goto exit;
1148 } 1152 }
@@ -1160,6 +1164,10 @@ decode_error:
1160 GST_ELEMENT_ERROR (dec, STREAM, DECODE, 1164 GST_ELEMENT_ERROR (dec, STREAM, DECODE,
1161 (_("Failed to decode JPEG image")), 1165 (_("Failed to decode JPEG image")),
1162 ("Error #%u: %s", code, dec->jerr.pub.jpeg_message_table[code])); 1166 ("Error #%u: %s", code, dec->jerr.pub.jpeg_message_table[code]));
1167 if (outbuf) {
1168 gst_buffer_unref (outbuf);
1169 outbuf = NULL;
1170 }
1163 ret = GST_FLOW_ERROR; 1171 ret = GST_FLOW_ERROR;
1164 goto done; 1172 goto done;
1165 } 1173 }