v4l2object: Validate returned dimensions
authorNicolas Dufresne <nicolas.dufresne@collabora.com>
Sat, 7 Dec 2013 15:31:15 +0000 (10:31 -0500)
committerNicolas Dufresne <nicolas.dufresne@collabora.com>
Fri, 10 Jan 2014 22:13:23 +0000 (17:13 -0500)
https://bugzilla.gnome.org/show_bug.cgi?id=720568

sys/v4l2/gstv4l2object.c

index e605419..572ad9e 100644 (file)
@@ -2919,6 +2919,9 @@ gst_v4l2_object_setup_format (GstV4l2Object * v4l2object,
   if (v4l2_ioctl (v4l2object->video_fd, VIDIOC_G_FMT, &fmt) < 0)
     goto get_fmt_failed;
 
+  if (fmt.fmt.pix.width == 0 || fmt.fmt.pix.height == 0)
+    goto invalid_dimensions;
+
   fmtdesc = gst_v4l2_object_get_format_from_fourcc (v4l2object,
       fmt.fmt.pix.pixelformat);
   if (fmtdesc == NULL)
@@ -2968,6 +2971,14 @@ get_fmt_failed:
         (_("Video device did not provide output format.")), GST_ERROR_SYSTEM);
     return FALSE;
   }
+invalid_dimensions:
+  {
+    GST_ELEMENT_WARNING (v4l2object->element, RESOURCE, SETTINGS,
+        (_("Video device returned invalid dimensions.")),
+        ("Expected non 0 dimensions, got %dx%d", fmt.fmt.pix.width,
+            fmt.fmt.pix.height));
+    return FALSE;
+  }
 unsupported_field:
   {
     GST_ELEMENT_ERROR (v4l2object->element, RESOURCE, SETTINGS,