[gnome-shell] st: Canonicalize URLs in stylesheets



commit 15273c7f22d241e2bcf3b757c0008e352c51d098
Author: Florian MÃllner <fmuellner gnome org>
Date:   Wed Oct 17 22:28:01 2012 +0200

    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 files changed, 26 insertions(+), 1 deletions(-)
---
diff --git a/src/st/st-theme.c b/src/st/st-theme.c
index f3b1c13..77076c0 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;
 }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]