summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastian Dröge <sebastian.droege@collabora.co.uk>2011-04-04 10:18:14 +0200
committerSebastian Dröge <sebastian.droege@collabora.co.uk>2011-04-04 10:18:14 +0200
commiteba33c1de11fc7fb63fb31a764d3c16698eea490 (patch)
tree7d3d3b1ea325e5134dfb9a2191964eb2d6cccecb
parentd0d27e83fe2338b20a641d62fdcfa232e7a913ce (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.c19
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++) {