Skip to content

Commit e365932

Browse files
committed
Updated param parsing to cope with bad input. Fixes weavejester#16.
1 parent bffc392 commit e365932

2 files changed

Lines changed: 10 additions & 2 deletions

File tree

src/compojure/http/request.clj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,11 @@
2222
[param-string separator]
2323
(reduce
2424
(fn [param-map s]
25-
(let [[key val] (re-split #"=" s)]
25+
(if-let [[_ key val] (re-matches #"([^=]+)=(.*)" s)]
2626
(assoc-vec param-map
2727
(keyword (urldecode key))
28-
(urldecode (or val "")))))
28+
(urldecode (or val "")))
29+
param-map))
2930
{}
3031
(remove blank?
3132
(re-split separator param-string))))

test/compojure/http/request.clj

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@
1616
(is (= (parse-query-params {:query-string "a=1%202"})
1717
{:a "1 2"})))
1818

19+
(deftest query-params-invalid
20+
(are (= (parse-query-params {:query-string _1}) _2)
21+
"" {}
22+
"=" {}
23+
"=1" {}
24+
"a=1&=" {:a "1"}))
25+
1926
(deftest urlencoded-charset
2027
(is (urlencoded-form?
2128
{:content-type "application/x-www-form-urlencoded; charset=UTF8"})))

0 commit comments

Comments
 (0)