fix: percent-encode page URLs built from file paths

build_url() escaped %, # and ? one by one, so a file name carrying any
other character that a URL path cannot hold - a space, a quote, an angle
bracket, a control character - was emitted raw and only resolved if the
host happened to serve the same byte sequence the index was built from.

Encode the URL that build_url derives from the file path with the URL
spec's path percent-encode set, leaving / alone so the separators between
path segments survive. % stays in the set, so a file literally named in
encoded form keeps pointing at the file that is on disk.

URLs supplied by the caller (data-pagefind-meta="url:...", addCustomRecord)
do not go through build_url and are untouched.

Fixes #619
This commit is contained in:
dualfroz committed 2026-09-23 06:22:15 +02:00
1 parent 996b9c3416
commit 49fb9b1b9b
3 files changed
+45 -7

No files matched your search

Generated
+1
View File
@@ -2303,6 +2303,7 @@ dependencies = [
"minifier",
"pagefind_stem 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
"path-slash",
"percent-encoding",
"portpicker",
"rayon",
"regex",