iterator: only unset GValue if it was inited
authorTim-Philipp Müller <tim@centricular.com>
Mon, 23 May 2016 17:00:30 +0000 (18:00 +0100)
committerTim-Philipp Müller <tim@centricular.com>
Mon, 23 May 2016 17:09:48 +0000 (18:09 +0100)
And add some function guards. From GLib 2.48 on it is
allowed to pass an uninitialised GValue to g_value_unset().

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

gst/gstiterator.c

index 77f0c02..b15b202 100644 (file)
@@ -607,6 +607,8 @@ gst_iterator_fold (GstIterator * it, GstIteratorFoldFunction func,
   GValue item = { 0, };
   GstIteratorResult result;
 
+  g_return_val_if_fail (it != NULL, GST_ITERATOR_ERROR);
+
   while (1) {
     result = gst_iterator_next (it, &item);
     switch (result) {
@@ -625,7 +627,13 @@ gst_iterator_fold (GstIterator * it, GstIteratorFoldFunction func,
   }
 
 fold_done:
+
+#if GLIB_CHECK_VERSION (2, 48, 0)
   g_value_unset (&item);
+#else
+  if (item.g_type != 0)
+    g_value_unset (&item);
+#endif
 
   return result;
 }