Skip to content

Commit 6386ed3

Browse files
committed
Tweaks after review 6
- Only catch InvalidFileNameException. - Test for InvalidFileNameException instead of Throwable. - Add CPS style arities to default-invalid-filename-handler - Add the exception to the request, so it's available for the invalid-filename-handler. - Update docstring. - Update tests.
1 parent 3f988b4 commit 6386ed3

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

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

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -137,8 +137,11 @@
137137
{:multipart-params params}
138138
{:params params}))))
139139

140-
(defn default-invalid-filename-handler [request e]
141-
(response/bad-request (.getMessage e)))
140+
(defn default-invalid-filename-handler
141+
([request]
142+
(-> request ::invalid-filename-exception .getMessage response/bad-request))
143+
([request respond raise]
144+
(respond (default-invalid-filename-handler request))))
142145

143146
(defn wrap-multipart-params
144147
"Middleware to parse multipart parameters from a request. Adds the following
@@ -172,9 +175,9 @@
172175
parameters: request, bytes-read, content-length, and item-count.
173176
174177
:invalid-filename-handler
175-
- A function that gets called when the file being uploaded has an invalid name.
176-
The function should expect two parameters: request and an exception of type
177-
InvalidFileNameException. It should return a ring response."
178+
- A handler that gets called when the file being uploaded has an invalid name.
179+
When this handler receives the request it can expect one additional key,
180+
::invalid-filename-exception, which contains an InvalidFileNameException."
178181
([handler]
179182
(wrap-multipart-params handler {}))
180183
([handler options]
@@ -183,14 +186,16 @@
183186
(fn ([request]
184187
(let [req-or-ex (try
185188
(multipart-params-request request options)
186-
(catch Exception ex ex))]
187-
(if (instance? Throwable req-or-ex)
188-
(invalid-filename-handler request req-or-ex)
189+
(catch InvalidFileNameException ex ex))]
190+
(if (instance? InvalidFileNameException req-or-ex)
191+
(invalid-filename-handler
192+
(assoc request ::invalid-filename-exception req-or-ex))
189193
(handler req-or-ex))))
190194
([request respond raise]
191195
(let [req-or-ex (try
192196
(multipart-params-request request options)
193-
(catch Exception ex ex))]
194-
(if (instance? Throwable req-or-ex)
195-
(respond (invalid-filename-handler request req-or-ex))
197+
(catch InvalidFileNameException ex ex))]
198+
(if (instance? InvalidFileNameException req-or-ex)
199+
(invalid-filename-handler
200+
(assoc request ::invalid-filename-exception req-or-ex) respond raise)
196201
(handler req-or-ex respond raise))))))))

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
(ns ring.middleware.test.multipart-params
22
(:require [clojure.test :refer :all]
3-
[ring.middleware.multipart-params :refer :all]
3+
[ring.middleware.multipart-params :refer :all :as multipart-params]
44
[ring.middleware.multipart-params.byte-array :refer :all]
55
[ring.util.io :refer [string-input-stream]])
66
(:import org.apache.commons.fileupload.InvalidFileNameException))
@@ -191,10 +191,10 @@
191191
invalid-filename-exception
192192
(try
193193
(org.apache.commons.fileupload.util.Streams/checkFileName invalid-filename)
194-
(catch Exception e
195-
e))
194+
(catch Exception e e))
196195
err-response (default-invalid-filename-handler
197-
:unused-arg invalid-filename-exception)]
196+
{::multipart-params/invalid-filename-exception
197+
invalid-filename-exception})]
198198
(testing "Synchronous error response"
199199
(let [handler (wrap-multipart-params identity)]
200200
(is (= err-response (handler request)))))

0 commit comments

Comments
 (0)