matroskademux: Verify lace size in _parse_blockgroup_or_simpleblock
authorPhilip Jägenstedt <philipj@opera.com>
Thu, 13 May 2010 10:10:54 +0000 (12:10 +0200)
committerSebastian Dröge <sebastian.droege@collabora.co.uk>
Wed, 19 May 2010 18:35:52 +0000 (20:35 +0200)
Failure to do this for corrupt input can cause a subbuffer bigger
than the actual buffer to be created, quickly leading to segfault.
Test case:
bug_s222005751_r0.001____memcpy.webm

gst/matroska/matroska-demux.c

index 0dfd9413354f8da38d22d6a0e12339978afef440..8478893f31a5e45417a4fcc0ce9df38a5c55cb23 100644 (file)
@@ -4636,6 +4636,11 @@ gst_matroska_demux_parse_blockgroup_or_simpleblock (GstMatroskaDemux * demux,
     for (n = 0; n < laces; n++) {
       GstBuffer *sub;
 
+      if (G_UNLIKELY (lace_size[n] > size)) {
+        GST_WARNING_OBJECT (demux, "Invalid lace size");
+        break;
+      }
+
       sub = gst_buffer_create_sub (buf,
           GST_BUFFER_SIZE (buf) - size, lace_size[n]);
       GST_DEBUG_OBJECT (demux, "created subbuffer %p", sub);