jpegenc: error out instead of crashing if no caps have been set
authorTim-Philipp Müller <tim.muller@collabora.co.uk>
Thu, 19 Feb 2009 20:14:10 +0000 (20:14 +0000)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Wed, 25 Feb 2009 12:50:37 +0000 (12:50 +0000)
Don't crash if we receive a buffer without caps. Fixes #572413.

ext/jpeg/gstjpegenc.c

index df4b416..5edb11f 100644 (file)
@@ -427,6 +427,9 @@ gst_jpegenc_chain (GstPad * pad, GstBuffer * buf)
 
   jpegenc = GST_JPEGENC (GST_OBJECT_PARENT (pad));
 
+  if (G_UNLIKELY (jpegenc->width <= 0 || jpegenc->height <= 0))
+    goto not_negotiated;
+
   data = GST_BUFFER_DATA (buf);
   size = GST_BUFFER_SIZE (buf);
 
@@ -495,6 +498,14 @@ done:
   gst_buffer_unref (buf);
 
   return ret;
+
+/* ERRORS */
+not_negotiated:
+  {
+    GST_WARNING_OBJECT (jpegenc, "no input format set (no caps on buffer)");
+    ret = GST_FLOW_NOT_NEGOTIATED;
+    goto done;
+  }
 }
 
 static void
@@ -572,6 +583,8 @@ gst_jpegenc_change_state (GstElement * element, GstStateChange transition)
       filter->line[0] = NULL;
       filter->line[1] = NULL;
       filter->line[2] = NULL;
+      filter->width = -1;
+      filter->height = -1;
       break;
     default:
       break;