From 8cd85cf9d9d6cb494484c6b5a55ca3c38d7dc810 Mon Sep 17 00:00:00 2001 From: James Reeves Date: Fri, 2 Dec 2011 20:02:15 +0000 Subject: [PATCH] Fixed parameter-parsing issue with non-UTF8-encoded data --- ring-core/src/ring/middleware/params.clj | 2 +- ring-core/src/ring/util/test.clj | 9 ++++++--- ring-core/test/ring/middleware/test/params.clj | 8 ++++++++ 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/ring-core/src/ring/middleware/params.clj b/ring-core/src/ring/middleware/params.clj index 4ea4623d..be3f98f4 100644 --- a/ring-core/src/ring/middleware/params.clj +++ b/ring-core/src/ring/middleware/params.clj @@ -47,7 +47,7 @@ [request encoding] (merge-with merge request (if-let [body (and (urlencoded-form? request) (:body request))] - (let [params (parse-params (slurp body) encoding)] + (let [params (parse-params (slurp body :encoding encoding) encoding)] {:form-params params, :params params}) {:form-params {}, :params {}}))) diff --git a/ring-core/src/ring/util/test.clj b/ring-core/src/ring/util/test.clj index 48cab587..de41b78c 100644 --- a/ring-core/src/ring/util/test.clj +++ b/ring-core/src/ring/util/test.clj @@ -1,7 +1,10 @@ (ns ring.util.test "Utilities for testing Ring components." - (:import (java.io ByteArrayInputStream))) + (:import java.io.ByteArrayInputStream)) -(defn string-input-stream [^String s] +(defn string-input-stream "Returns a ByteArrayInputStream for the given String." - (ByteArrayInputStream. (.getBytes s))) + ([^String s] + (ByteArrayInputStream. (.getBytes s))) + ([^String s encoding] + (ByteArrayInputStream. (.getBytes s encoding)))) diff --git a/ring-core/test/ring/middleware/test/params.clj b/ring-core/test/ring/middleware/test/params.clj index 4221787e..0617cd99 100644 --- a/ring-core/test/ring/middleware/test/params.clj +++ b/ring-core/test/ring/middleware/test/params.clj @@ -36,3 +36,11 @@ (is (= {} (:query-params resp))) (is (= {} (:form-params resp))) (is (= {} (:params resp))))) + +(deftest wrap-params-encoding + (let [req {:character-encoding "UTF-16" + :content-type "application/x-www-form-urlencoded" + :body (tu/string-input-stream "hello=world" "UTF-16")} + resp (wrapped-echo req)] + (is (= (:params resp) {"hello" "world"})) + (is (= (:form-params resp) {"hello" "world"}))))