From 15273c7f22d241e2bcf3b757c0008e352c51d098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 17 Oct 2012 22:28:01 +0200 Subject: [PATCH] st: Canonicalize URLs in stylesheets Make _st_theme_resolve_url() a bit smarter by canonicalizing the resulting path (e.g. resolving references to /./ and /../). https://bugzilla.gnome.org/show_bug.cgi?id=679268 --- src/st/st-theme.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/st/st-theme.c b/src/st/st-theme.c index f3b1c13b7..77076c09e 100644 --- a/src/st/st-theme.c +++ b/src/st/st-theme.c @@ -1018,6 +1018,7 @@ _st_theme_resolve_url (StTheme *theme, const char *base_filename = NULL; char *dirname; char *filename; + char *canonicalized_path; /* Handle absolute file:/ URLs */ if (g_str_has_prefix (url, "file:") || @@ -1050,7 +1051,19 @@ _st_theme_resolve_url (StTheme *theme, /* Assume anything else is a relative URL, and "resolve" it */ if (url[0] == '/') - return g_strdup (url); + { + canonicalized_path = realpath (url, NULL); + if (g_mem_is_system_malloc ()) + { + filename = canonicalized_path; + } + else + { + filename = g_strdup (canonicalized_path); + free (canonicalized_path); + } + return filename; + } base_filename = g_hash_table_lookup (theme->filenames_by_stylesheet, base_stylesheet); @@ -1062,7 +1075,19 @@ _st_theme_resolve_url (StTheme *theme, dirname = g_path_get_dirname (base_filename); filename = g_build_filename (dirname, url, NULL); + canonicalized_path = realpath (filename, NULL); g_free (dirname); + g_free (filename); + + if (g_mem_is_system_malloc ()) + { + filename = canonicalized_path; + } + else + { + filename = g_strdup (canonicalized_path); + free (canonicalized_path); + } return filename; }