Skip to content

Commit 75e6c7a

Browse files
committed
Various fixes based on PR feedback
- Adds tests - Fix broken async implementation
1 parent e313c7d commit 75e6c7a

File tree

2 files changed

+32
-2
lines changed

2 files changed

+32
-2
lines changed

ring-core/src/ring/middleware/multipart_params.clj

+5-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
ring.middleware.multipart-params.temp-file/temp-file-store"
1010
(:require [ring.util.codec :refer [assoc-conj]]
1111
[ring.util.request :as req]
12+
[ring.util.response :as response]
1213
[ring.util.parsing :refer [re-charset]])
1314
(:import [org.apache.commons.fileupload UploadContext
1415
FileItemIterator
@@ -174,9 +175,11 @@
174175
(try
175176
(handler (multipart-params-request request options))
176177
(catch InvalidFileNameException e
177-
{:status 400 :body (.getMessage e)})))
178+
(response/bad-request (.getMessage e)))))
178179
([request respond raise]
179180
(try
180181
(handler (multipart-params-request request options) respond raise)
181182
(catch InvalidFileNameException e
182-
{:status 400 :body (.getMessage e)}))))))
183+
(handler request
184+
(fn [_] (respond (response/bad-request (.getMessage e))))
185+
raise)))))))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
(ns ring.middleware.multipart-params.test.multipart-params
2+
(:require [clojure.test :refer :all]
3+
[ring.middleware.multipart-params :refer :all]
4+
[ring.util.response :as response])
5+
(:import org.apache.commons.fileupload.InvalidFileNameException))
6+
7+
(deftest wrap-multipart-params-error-test
8+
(let [invalid-file-name "foo\\0.bar"
9+
error-msg (str "Invalid file name: " invalid-file-name)]
10+
(with-redefs [multipart-params-request
11+
(fn [& _]
12+
(throw (InvalidFileNameException.
13+
invalid-file-name
14+
error-msg)))]
15+
(testing "Synchronous error response"
16+
(let [handler (wrap-multipart-params (constantly (response/response "Ok")))]
17+
(is (= (response/bad-request error-msg)
18+
(handler {:uri "/foo/bar"})))))
19+
(testing "Asynchronous error response"
20+
(let [handler (wrap-multipart-params (fn [_ respond _]
21+
(respond (response/response "Ok"))))
22+
response (promise)
23+
exception (promise)]
24+
(handler {:uri "/foo/bar"} response exception)
25+
(is (= (response/bad-request error-msg)
26+
(deref response 2000 :timed-out)))
27+
(is (not (realized? exception))))))))

0 commit comments

Comments
 (0)