[yelp/gnome-41] Be even more careful about stripping slashes



commit b93fb44a90f8c7cd9f6137ea191591ddff1deb56
Author: Shaun McCance <shaunm gnome org>
Date:   Thu Dec 2 15:14:04 2021 -0500

    Be even more careful about stripping slashes
    
    We broke absolute file paths in 41.beta, then we fixed them, but
    it turns out ghelp URIs were still broken. The fix isn't great,
    but it should work fine.
    
    Fixes #187

 libyelp/yelp-document.c    | 2 +-
 libyelp/yelp-uri-builder.c | 8 +++++++-
 2 files changed, 8 insertions(+), 2 deletions(-)
---
diff --git a/libyelp/yelp-document.c b/libyelp/yelp-document.c
index cfac7291..fb340ebd 100644
--- a/libyelp/yelp-document.c
+++ b/libyelp/yelp-document.c
@@ -220,7 +220,7 @@ yelp_document_get_for_uri (YelpUri *uri)
         return g_object_ref (document);
     }
 
-    switch (yelp_uri_get_document_type (uri)) {
+    switch (doctype) {
     case YELP_URI_DOCUMENT_TYPE_TEXT:
     case YELP_URI_DOCUMENT_TYPE_HTML:
     case YELP_URI_DOCUMENT_TYPE_XHTML:
diff --git a/libyelp/yelp-uri-builder.c b/libyelp/yelp-uri-builder.c
index 72084596..680bf90b 100644
--- a/libyelp/yelp-uri-builder.c
+++ b/libyelp/yelp-uri-builder.c
@@ -109,7 +109,13 @@ build_yelp_uri (const gchar *uri_str)
             memmove (resource, resource + 1, strlen (resource));
     }
     else if (g_str_has_prefix (uri, "ghelp:")) {
-        if (resource[0] == '/' && resource[1] == '/')
+        /* This is an ugly heuristic that probably always works. The URI
+           mangling ends up not distinguishing between absolute file paths
+           and ordinary old ghelp URIs. But absolute file paths should
+           have more than one slash, right? This will fail:
+               cp foo.xml / && yelp /foo.xml
+         */
+        if (resource[0] == '/' && !strchr (resource + 1, '/'))
             memmove (resource, resource + 1, strlen (resource));
     }
   }


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