Skip to content

Commit b12214f

Browse files
committed
Merge pull request #8 from jcf/strict-url-decoding
Only decode valid percent codes
2 parents d046a9c + 7800885 commit b12214f

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)