From eba33c1de11fc7fb63fb31a764d3c16698eea490 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Mon, 4 Apr 2011 10:18:14 +0200 Subject: [PATCH] structure: Don't allow invalid GDates in all structures and don't allow NULL GDates in taglists Some code (e.g. gstvorbistag.c) assumes non-NULL GDates in taglists and explodes otherwise and NULL or invalid GDates don't make much sense anyway. --- gst/gststructure.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/gst/gststructure.c b/gst/gststructure.c index 011639a41a..92b6b93d35 100644 --- a/gst/gststructure.c +++ b/gst/gststructure.c @@ -782,6 +782,25 @@ gst_structure_set_field (GstStructure * structure, GstStructureField * field) g_value_unset (&field->value); return; } + } else if (G_UNLIKELY (GST_VALUE_HOLDS_DATE (&field->value))) { + const GDate *d; + + d = gst_value_get_date (&field->value); + /* only check for NULL GDates in taglists, as they might make sense + * in other, generic structs */ + if (G_UNLIKELY ((IS_TAGLIST (structure) && d == NULL))) { + GIT_G_WARNING ("Trying to set NULL GDate on field '%s' on taglist. " + "Please file a bug.", g_quark_to_string (field->name)); + g_value_unset (&field->value); + return; + } else if (G_UNLIKELY (d != NULL && !g_date_valid (d))) { + g_warning + ("Trying to set invalid GDate on %s field '%s'. Please file a bug.", + IS_TAGLIST (structure) ? "taglist" : "structure", + g_quark_to_string (field->name)); + g_value_unset (&field->value); + return; + } } for (i = 0; i < len; i++) {