libextractor

GNU libextractor
Log | Files | Refs | Submodules | README | LICENSE

commit 804a999c4550f236f835f391871c70bf90ffec1a
parent eabea63a7943baa3694bb30b42dea57c3b9165b9
Author: LRN <lrn1986@gmail.com>
Date:   Thu, 16 Aug 2012 07:20:55 +0000

Be more picky when serializing types for unknown vals

Diffstat:
Msrc/plugins/gstreamer_extractor.c | 19+++++++++++++++++--
1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/plugins/gstreamer_extractor.c b/src/plugins/gstreamer_extractor.c @@ -847,7 +847,8 @@ send_structure_foreach (GQuark field_id, const GValue *value, { PrivStruct *ps = (PrivStruct *) user_data; gchar *str; - const char *field_name = g_quark_to_string (field_id); + const gchar *field_name = g_quark_to_string (field_id); + const gchar *type_name = g_type_name (G_VALUE_TYPE (value)); /* TODO: check a list of known quarks, use specific EXTRACTOR_MetaType */ switch (G_VALUE_TYPE (value)) @@ -856,9 +857,17 @@ send_structure_foreach (GQuark field_id, const GValue *value, str = g_value_dup_string (value); break; case G_TYPE_UINT: + case G_TYPE_INT: case G_TYPE_DOUBLE: - default: + case G_TYPE_BOOLEAN: str = gst_value_serialize (value); + break; + default: + /* This is a potential source of invalid characters */ + /* And it also might attempt to serialize binary data - such as images. */ + str = NULL; + g_print ("Will not try to serialize structure field %s (%s)\n", field_name, type_name); + break; } if (str != NULL) { @@ -1164,7 +1173,9 @@ send_tag_foreach (const GstTagList * tags, const gchar * tag, str = g_value_dup_string (&val); break; case G_TYPE_UINT: + case G_TYPE_INT: case G_TYPE_DOUBLE: + case G_TYPE_BOOLEAN: str = gst_value_serialize (&val); break; default: @@ -1319,9 +1330,12 @@ send_toc_tags_foreach (const GstTagList * tags, const gchar * tag, PrivStruct *ps = (PrivStruct *) user_data; GValue val = { 0, }; gchar *topen, *str, *tclose; + const gchar *type_name; gst_tag_list_copy_value (&val, tags, tag); + type_name = g_type_name (G_VALUE_TYPE (&val)); + switch (G_VALUE_TYPE (&val)) { case G_TYPE_STRING: @@ -1336,6 +1350,7 @@ send_toc_tags_foreach (const GstTagList * tags, const gchar * tag, /* This is a potential source of invalid characters */ /* And it also might attempt to serialize binary data - such as images. */ str = NULL; + g_print ("Will not try to serialize tag %s (%s)\n", tag, type_name); break; } if (str != NULL)