summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaun McCance <shaunm@gnome.org>2021-12-02 15:14:04 -0500
committerShaun McCance <shaunm@gnome.org>2022-03-25 12:07:55 -0400
commit4ac3be6397b03cf0daeb3c6e58957ef5b42fa6b2 (patch)
treea911d381a9f71a756b489d1d4ee01f3f4bb00151
parentea4ff8c8697f392d326e01f0c244ec56a109563f (diff)
downloadyelp-4ac3be6397b03cf0daeb3c6e58957ef5b42fa6b2.tar.gz
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
-rw-r--r--libyelp/yelp-document.c2
-rw-r--r--libyelp/yelp-uri-builder.c8
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));
}
}