diff options
author | Federico Mena Quintero <federico@gnome.org> | 2018-11-27 12:13:31 -0600 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2018-11-27 13:57:21 -0600 |
commit | e5f9bf2e9b85764ec22926be3532ef1b53ed8408 (patch) | |
tree | 8c13a2f3983c83a4bd29f465692eb96c3cae3c81 | |
parent | 0be4d3121716180ef1bed2eda89bd81c3a5e760e (diff) | |
download | gtk+-e5f9bf2e9b85764ec22926be3532ef1b53ed8408.tar.gz |
(#1471): base64-encode included SVGs to avoid mis-escaped characters
We wrap SVG data from icons within another SVG with extra styling
information. The wrapped SVG may contain characters that cannot be
part of a data: URL (https://fetch.spec.whatwg.org/#data-urls).
Librsvg 2.45 got more strict in its parsing of data: URLs; whereas
previously it ignored '#' characters in them, now it considers them to
be the start of a fragment identifier, which is not allowed in data:
URLs anyway.
To avoid unallowed characters, we now create a data: URL with a
base-64 encoded SVG.
Fixes https://gitlab.gnome.org/GNOME/gtk/issues/1471
-rw-r--r-- | gtk/gtkicontheme.c | 4 | ||||
-rw-r--r-- | gtk/tools/gdkpixbufutils.c | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/gtk/gtkicontheme.c b/gtk/gtkicontheme.c index e728b0bdb7..1958b7d133 100644 --- a/gtk/gtkicontheme.c +++ b/gtk/gtkicontheme.c @@ -4144,7 +4144,7 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info, width = g_strdup_printf ("%d", icon_info->symbolic_width); height = g_strdup_printf ("%d", icon_info->symbolic_height); - escaped_file_data = g_markup_escape_text (file_data, file_len); + escaped_file_data = g_base64_encode ((guchar *) file_data, file_len); g_free (file_data); g_ascii_dtostr (alphastr, G_ASCII_DTOSTR_BUF_SIZE, CLAMP (alpha, 0, 1)); @@ -4169,7 +4169,7 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info, " fill: ", css_success, " !important;\n" " }\n" " </style>\n" - " <g opacity=\"", alphastr, "\" ><xi:include href=\"data:text/xml,", escaped_file_data, "\"/></g>\n" + " <g opacity=\"", alphastr, "\" ><xi:include href=\"data:text/xml;base64,", escaped_file_data, "\"/></g>\n" "</svg>", NULL); g_free (escaped_file_data); diff --git a/gtk/tools/gdkpixbufutils.c b/gtk/tools/gdkpixbufutils.c index b47ebf9df8..0ed23bd3dc 100644 --- a/gtk/tools/gdkpixbufutils.c +++ b/gtk/tools/gdkpixbufutils.c @@ -178,7 +178,7 @@ load_symbolic_svg (const char *file_data, svg_height = g_strdup_printf ("%d", gdk_pixbuf_get_height (pixbuf)); g_object_unref (pixbuf); - escaped_file_data = g_markup_escape_text (file_data, file_len); + escaped_file_data = g_base64_encode ((guchar *) file_data, file_len); data = g_strconcat ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n" "<svg version=\"1.1\"\n" @@ -200,7 +200,7 @@ load_symbolic_svg (const char *file_data, " fill: ", css_success, " !important;\n" " }\n" " </style>\n" - " <xi:include href=\"data:text/xml,", escaped_file_data, "\"/>\n" + " <xi:include href=\"data:text/xml;base64,", escaped_file_data, "\"/>\n" "</svg>", NULL); g_free (escaped_file_data); |