forked from AuroraMiddleware/gtk
(#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
This commit is contained in:
parent
0be4d31217
commit
e5f9bf2e9b
@ -4144,7 +4144,7 @@ gtk_icon_info_load_symbolic_svg (GtkIconInfo *icon_info,
|
|||||||
width = g_strdup_printf ("%d", icon_info->symbolic_width);
|
width = g_strdup_printf ("%d", icon_info->symbolic_width);
|
||||||
height = g_strdup_printf ("%d", icon_info->symbolic_height);
|
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_free (file_data);
|
||||||
|
|
||||||
g_ascii_dtostr (alphastr, G_ASCII_DTOSTR_BUF_SIZE, CLAMP (alpha, 0, 1));
|
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"
|
" fill: ", css_success, " !important;\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" </style>\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>",
|
"</svg>",
|
||||||
NULL);
|
NULL);
|
||||||
g_free (escaped_file_data);
|
g_free (escaped_file_data);
|
||||||
|
@ -178,7 +178,7 @@ load_symbolic_svg (const char *file_data,
|
|||||||
svg_height = g_strdup_printf ("%d", gdk_pixbuf_get_height (pixbuf));
|
svg_height = g_strdup_printf ("%d", gdk_pixbuf_get_height (pixbuf));
|
||||||
g_object_unref (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"
|
data = g_strconcat ("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n"
|
||||||
"<svg version=\"1.1\"\n"
|
"<svg version=\"1.1\"\n"
|
||||||
@ -200,7 +200,7 @@ load_symbolic_svg (const char *file_data,
|
|||||||
" fill: ", css_success, " !important;\n"
|
" fill: ", css_success, " !important;\n"
|
||||||
" }\n"
|
" }\n"
|
||||||
" </style>\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>",
|
"</svg>",
|
||||||
NULL);
|
NULL);
|
||||||
g_free (escaped_file_data);
|
g_free (escaped_file_data);
|
||||||
|
Loading…
Reference in New Issue
Block a user