Skip to content

Commit 7800885

Browse files
author
James Conroy-Finn
committed
Only decode valid percent codes
1 parent d046a9c commit 7800885

File tree

2 files changed

+3
-2
lines changed

2 files changed

+3
-2
lines changed

src/ring/util/codec.clj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
(str/join)))
3838

3939
(defn- parse-bytes [encoded-bytes]
40-
(->> (re-seq #"%.." encoded-bytes)
40+
(->> (re-seq #"%[A-Za-z0-9]{2}" encoded-bytes)
4141
(map #(subs % 1))
4242
(map #(.byteValue (Integer/valueOf % 16)))
4343
(byte-array)))
@@ -47,7 +47,7 @@
4747
specified encoding, or UTF-8 by default."
4848
[^String encoded & [^String encoding]]
4949
(str/replace encoded
50-
#"(?:%..)+"
50+
#"(?:%[A-Za-z0-9]{2})+"
5151
(fn [chars]
5252
(-> ^bytes (parse-bytes chars)
5353
(String. (or encoding "UTF-8"))

test/ring/util/test/codec.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
(is (= (percent-encode "foo") "%66%6F%6F")))
1010

1111
(deftest test-percent-decode
12+
(is (= (percent-decode "%s/") "%s/"))
1213
(is (= (percent-decode "%20") " "))
1314
(is (= (percent-decode "foo%20bar") "foo bar"))
1415
(is (= (percent-decode "foo%FE%FF%00%2Fbar" "UTF-16") "foo/bar"))

0 commit comments

Comments
 (0)