[gimp] Bug 711241 - Broken or unknown metadata tag should not cancel...
- From: Michael Natterer <mitch src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gimp] Bug 711241 - Broken or unknown metadata tag should not cancel...
- Date: Fri, 1 Nov 2013 13:17:56 +0000 (UTC)
commit 798c62a54486916c69141463980a4497aea14b98
Author: Michael Natterer <mitch gimp org>
Date: Fri Nov 1 14:15:15 2013 +0100
Bug 711241 - Broken or unknown metadata tag should not cancel...
...the whole metadata loading
Don't serialize a value that does not UTF-8-validate to XML. This is
not a real fix, but no matter what we do here in the future, UTF-8
validation should always be part of the serialization, in order to
avoid passing broken data into the core.
libgimpbase/gimpmetadata.c | 61 ++++++++++++++++++++++++++++---------------
1 files changed, 40 insertions(+), 21 deletions(-)
---
diff --git a/libgimpbase/gimpmetadata.c b/libgimpbase/gimpmetadata.c
index 4cf4a70..fc10e59 100644
--- a/libgimpbase/gimpmetadata.c
+++ b/libgimpbase/gimpmetadata.c
@@ -346,6 +346,19 @@ gimp_metadata_deserialize (const gchar *metadata_xml)
return metadata;
}
+static gchar *
+gimp_metadata_escape (const gchar *name,
+ const gchar *value)
+{
+ if (! g_utf8_validate (value, -1, NULL))
+ {
+ g_printerr ("Invalid UTF-8 in metadata value %s: %s\n", name, value);
+ return NULL;
+ }
+
+ return g_markup_escape_text (value, -1);
+}
+
/**
* gimp_metadata_serialize:
* @metadata: A #GimpMetadata instance.
@@ -381,14 +394,16 @@ gimp_metadata_serialize (GimpMetadata *metadata)
{
for (i = 0; exif_data[i] != NULL; i++)
{
- value = gexiv2_metadata_get_tag_string (metadata, exif_data[i]);
- escaped = g_markup_escape_text (value, -1);
-
- g_string_append_printf (string, " <tag name=\"%s\">%s</tag>\n",
- exif_data[i], escaped);
-
- g_free (escaped);
+ value = gexiv2_metadata_get_tag_string (metadata, exif_data[i]);
+ escaped = gimp_metadata_escape (exif_data[i], value);
g_free (value);
+
+ if (escaped)
+ {
+ g_string_append_printf (string, " <tag name=\"%s\">%s</tag>\n",
+ exif_data[i], escaped);
+ g_free (escaped);
+ }
}
g_strfreev (exif_data);
@@ -400,14 +415,16 @@ gimp_metadata_serialize (GimpMetadata *metadata)
{
for (i = 0; xmp_data[i] != NULL; i++)
{
- value = gexiv2_metadata_get_tag_string (metadata, xmp_data[i]);
- escaped = g_markup_escape_text (value, -1);
-
- g_string_append_printf (string, " <tag name=\"%s\">%s</tag>\n",
- xmp_data[i], escaped);
-
- g_free (escaped);
+ value = gexiv2_metadata_get_tag_string (metadata, xmp_data[i]);
+ escaped = gimp_metadata_escape (xmp_data[i], value);
g_free (value);
+
+ if (escaped)
+ {
+ g_string_append_printf (string, " <tag name=\"%s\">%s</tag>\n",
+ xmp_data[i], escaped);
+ g_free (escaped);
+ }
}
g_strfreev (xmp_data);
@@ -419,14 +436,16 @@ gimp_metadata_serialize (GimpMetadata *metadata)
{
for (i = 0; iptc_data[i] != NULL; i++)
{
- value = gexiv2_metadata_get_tag_string (metadata, iptc_data[i]);
- escaped = g_markup_escape_text (value, -1);
-
- g_string_append_printf (string, " <tag name=\"%s\">%s</tag>\n",
- iptc_data[i], escaped);
-
- g_free (escaped);
+ value = gexiv2_metadata_get_tag_string (metadata, iptc_data[i]);
+ escaped = gimp_metadata_escape (iptc_data[i], value);
g_free (value);
+
+ if (escaped)
+ {
+ g_string_append_printf (string, " <tag name=\"%s\">%s</tag>\n",
+ iptc_data[i], escaped);
+ g_free (escaped);
+ }
}
g_strfreev (iptc_data);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]