discoverer: Only allow serializing OK discoverer infos to GVariants
authorSebastian Dröge <sebastian@centricular.com>
Tue, 21 Jun 2016 07:24:15 +0000 (10:24 +0300)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 21 Jun 2016 07:24:15 +0000 (10:24 +0300)
They will be incomplete otherwise and we can't generate the full serialized
information, and instead will crash somewhere on the way.

https://bugzilla.gnome.org/show_bug.cgi?id=767859

gst-libs/gst/pbutils/gstdiscoverer.c
tests/check/libs/discoverer.c

index af2046a..45de5f5 100644 (file)
@@ -2200,11 +2200,14 @@ gst_discoverer_info_to_variant (GstDiscovererInfo * info,
   /* FIXME: implement TOC support */
   GVariant *stream_variant;
   GVariant *variant;
-  GstDiscovererStreamInfo *sinfo = gst_discoverer_info_get_stream_info (info);
+  GstDiscovererStreamInfo *sinfo;
   GVariant *wrapper;
 
   g_return_val_if_fail (GST_IS_DISCOVERER_INFO (info), NULL);
+  g_return_val_if_fail (gst_discoverer_info_get_result (info) ==
+      GST_DISCOVERER_OK, NULL);
 
+  sinfo = gst_discoverer_info_get_stream_info (info);
   stream_variant = gst_discoverer_info_to_variant_recurse (sinfo, flags);
   variant =
       g_variant_new ("(vv)", _serialize_info (info, flags), stream_variant);
index 8fe5ecf..aa2b9a9 100644 (file)
@@ -66,6 +66,8 @@ GST_START_TEST (test_disco_serializing)
 
   info = gst_discoverer_discover_uri (dc, uri, &err);
   fail_unless (info);
+  fail_unless_equals_int (gst_discoverer_info_get_result (info),
+      GST_DISCOVERER_OK);
   serialized =
       gst_discoverer_info_to_variant (info, GST_DISCOVERER_SERIALIZE_ALL);