From 0c8c98deb2973b3f3c4d2e4063c2e6ee2121c3c3 Mon Sep 17 00:00:00 2001 From: Jared Harper Date: Fri, 19 Aug 2022 08:41:37 -0700 Subject: [PATCH 1/3] Add `.` to set of unescaped characters in `urlencode` --- minijinja/src/filters.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/minijinja/src/filters.rs b/minijinja/src/filters.rs index 1d600f94..d97cde53 100644 --- a/minijinja/src/filters.rs +++ b/minijinja/src/filters.rs @@ -689,7 +689,7 @@ mod builtins { #[cfg(feature = "urlencode")] pub fn urlencode(_: &State, value: Value) -> Result { const SET: &percent_encoding::AsciiSet = - &percent_encoding::NON_ALPHANUMERIC.remove(b'/').add(b' '); + &percent_encoding::NON_ALPHANUMERIC.remove(b'/').remove(b'.').add(b' '); match &value.0 { ValueRepr::None | ValueRepr::Undefined => Ok("".into()), ValueRepr::Bytes(b) => Ok(percent_encoding::percent_encode(b, SET).to_string()), From 5827aeff145254fbf914e4f48cd5827d33c413c0 Mon Sep 17 00:00:00 2001 From: Jared Harper Date: Fri, 19 Aug 2022 09:36:02 -0700 Subject: [PATCH 2/3] Update `urlencode` test to confirm `.` is not escaped The `.snap` file was added by confirming changes from within `cargo insta review` --- minijinja/tests/inputs/filters.txt | 2 +- minijinja/tests/snapshots/test_templates__vm@filters.txt.snap | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/minijinja/tests/inputs/filters.txt b/minijinja/tests/inputs/filters.txt index 422262fb..3bddf790 100644 --- a/minijinja/tests/inputs/filters.txt +++ b/minijinja/tests/inputs/filters.txt @@ -47,7 +47,7 @@ d: {{ undefined|d == "" }} json: {{ map|tojson }} json-pretty: {{ map|tojson(true) }} json-scary-html: {{ scary_html|tojson }} -urlencode: {{ "hello world/baz"|urlencode }} +urlencode: {{ "hello world/baz.txt"|urlencode }} urlencode-kv: {{ dict(a="x y", b=2, c=3)|urlencode }} batch: {{ range(10)|batch(3) }} batch-fill: {{ range(10)|batch(3, '-') }} diff --git a/minijinja/tests/snapshots/test_templates__vm@filters.txt.snap b/minijinja/tests/snapshots/test_templates__vm@filters.txt.snap index 54b430a7..9fb10948 100644 --- a/minijinja/tests/snapshots/test_templates__vm@filters.txt.snap +++ b/minijinja/tests/snapshots/test_templates__vm@filters.txt.snap @@ -1,9 +1,7 @@ --- source: minijinja/tests/test_templates.rs -assertion_line: 44 expression: "&rendered" input_file: minijinja/tests/inputs/filters.txt - --- lower: bird upper: BIRD @@ -49,7 +47,7 @@ json-pretty: { "c": "d" } json-scary-html: "\u003c\u003e\u0026\u0027" -urlencode: hello%20world/baz +urlencode: hello%20world/baz.txt urlencode-kv: a=x%20y&b=2&c=3 batch: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]] batch-fill: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, "-", "-"]] From e2c3501594e69787cb4bfef385f2438fe5a170d3 Mon Sep 17 00:00:00 2001 From: Jared Harper Date: Fri, 19 Aug 2022 09:59:03 -0700 Subject: [PATCH 3/3] Add additional characters --- minijinja/src/filters.rs | 8 ++++++-- minijinja/tests/inputs/filters.txt | 2 +- .../tests/snapshots/test_templates__vm@filters.txt.snap | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/minijinja/src/filters.rs b/minijinja/src/filters.rs index d97cde53..d8d93cc0 100644 --- a/minijinja/src/filters.rs +++ b/minijinja/src/filters.rs @@ -688,8 +688,12 @@ mod builtins { #[cfg_attr(docsrs, doc(cfg(all(feature = "builtins", feature = "urlencode"))))] #[cfg(feature = "urlencode")] pub fn urlencode(_: &State, value: Value) -> Result { - const SET: &percent_encoding::AsciiSet = - &percent_encoding::NON_ALPHANUMERIC.remove(b'/').remove(b'.').add(b' '); + const SET: &percent_encoding::AsciiSet = &percent_encoding::NON_ALPHANUMERIC + .remove(b'/') + .remove(b'.') + .remove(b'-') + .remove(b'_') + .add(b' '); match &value.0 { ValueRepr::None | ValueRepr::Undefined => Ok("".into()), ValueRepr::Bytes(b) => Ok(percent_encoding::percent_encode(b, SET).to_string()), diff --git a/minijinja/tests/inputs/filters.txt b/minijinja/tests/inputs/filters.txt index 3bddf790..4593fed2 100644 --- a/minijinja/tests/inputs/filters.txt +++ b/minijinja/tests/inputs/filters.txt @@ -47,7 +47,7 @@ d: {{ undefined|d == "" }} json: {{ map|tojson }} json-pretty: {{ map|tojson(true) }} json-scary-html: {{ scary_html|tojson }} -urlencode: {{ "hello world/baz.txt"|urlencode }} +urlencode: {{ "hello world/foo-bar_baz.txt"|urlencode }} urlencode-kv: {{ dict(a="x y", b=2, c=3)|urlencode }} batch: {{ range(10)|batch(3) }} batch-fill: {{ range(10)|batch(3, '-') }} diff --git a/minijinja/tests/snapshots/test_templates__vm@filters.txt.snap b/minijinja/tests/snapshots/test_templates__vm@filters.txt.snap index 9fb10948..dc035424 100644 --- a/minijinja/tests/snapshots/test_templates__vm@filters.txt.snap +++ b/minijinja/tests/snapshots/test_templates__vm@filters.txt.snap @@ -47,7 +47,7 @@ json-pretty: { "c": "d" } json-scary-html: "\u003c\u003e\u0026\u0027" -urlencode: hello%20world/baz.txt +urlencode: hello%20world/foo-bar_baz.txt urlencode-kv: a=x%20y&b=2&c=3 batch: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]] batch-fill: [[0, 1, 2], [3, 4, 5], [6, 7, 8], [9, "-", "-"]]