celt: a bit more error checking on header parsing
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Wed, 14 Sep 2011 19:22:42 +0000 (20:22 +0100)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Mon, 19 Sep 2011 07:39:16 +0000 (09:39 +0200)
https://bugzilla.gnome.org/show_bug.cgi?id=659087

ext/celt/gstceltdec.c
ext/celt/gstceltenc.c

index bb4acdfe3a38efd9c6659c31caf85780bd8197cf..6d3d9433c645a07217bbeace13addd9981ffeb67 100644 (file)
@@ -560,8 +560,11 @@ celt_dec_chain_parse_header (GstCeltDec * dec, GstBuffer * buf)
   gint error = CELT_OK;
 
   /* get the header */
-  celt_header_from_packet ((const unsigned char *) GST_BUFFER_DATA (buf),
+  error =
+      celt_header_from_packet ((const unsigned char *) GST_BUFFER_DATA (buf),
       GST_BUFFER_SIZE (buf), &dec->header);
+  if (error < 0)
+    goto invalid_header;
 
   if (memcmp (dec->header.codec_id, "CELT    ", 8) != 0)
     goto invalid_header;
index 2b09238d257e4798a6af763100baf9e1bff2c957..9e6944df0fa45feb8a542cdf3f586808756b7a62 100644 (file)
@@ -914,7 +914,11 @@ gst_celt_enc_chain (GstPad * pad, GstBuffer * buf)
     unsigned char *data = g_malloc (header_size);
 
     /* create header buffer */
-    celt_header_to_packet (&enc->header, data, header_size);
+    int error = celt_header_to_packet (&enc->header, data, header_size);
+    if (error < 0) {
+      g_free (data);
+      goto no_header;
+    }
     buf1 = gst_celt_enc_buffer_from_data (enc, data, header_size, 0);
 
     /* create comment buffer */
@@ -1047,6 +1051,13 @@ not_setup:
     goto done;
   }
 
+no_header:
+  {
+    GST_ELEMENT_ERROR (enc, STREAM, ENCODE, (NULL),
+        ("Failed to encode header"));
+    ret = GST_FLOW_ERROR;
+    goto done;
+  }
 }