diff options
author | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2011-04-04 10:18:14 +0200 |
---|---|---|
committer | Sebastian Dröge <sebastian.droege@collabora.co.uk> | 2011-04-04 10:18:14 +0200 |
commit | eba33c1de11fc7fb63fb31a764d3c16698eea490 (patch) | |
tree | 7d3d3b1ea325e5134dfb9a2191964eb2d6cccecb | |
parent | d0d27e83fe2338b20a641d62fdcfa232e7a913ce (diff) |
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.
-rw-r--r-- | gst/gststructure.c | 19 |
1 files changed, 19 insertions, 0 deletions
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++) { |