diff options
author | Stefan Kost <ensonic@users.sf.net> | 2009-09-29 17:51:04 +0300 |
---|---|---|
committer | Stefan Kost <ensonic@users.sf.net> | 2009-09-30 09:19:48 +0300 |
commit | b1feeee166b316689f1a3020d7ef37146fbf2ef1 (patch) | |
tree | fb6bee46c546cf79c5ad367f18f22b49bb6abc8f | |
parent | 477cb58640f1bd07317f1b54148338b75cb2b1fa (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.c | 10 |
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: | |||
1143 | need_more_data: | 1143 | need_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 | } |