diff --git a/servlet/src/main/java/io/undertow/servlet/spec/HttpServletRequestImpl.java b/servlet/src/main/java/io/undertow/servlet/spec/HttpServletRequestImpl.java index 9cea374874..214ddc340d 100644 --- a/servlet/src/main/java/io/undertow/servlet/spec/HttpServletRequestImpl.java +++ b/servlet/src/main/java/io/undertow/servlet/spec/HttpServletRequestImpl.java @@ -123,7 +123,7 @@ public final class HttpServletRequestImpl implements HttpServletRequest { private volatile AsyncContextImpl asyncContext = null; private Map> queryParameters; private FormData parsedFormData; - private RuntimeException formParsingException; + private Exception formParsingException; private Charset characterEncoding; private boolean readStarted; private SessionConfig.SessionCookieSource sessionCookieSource; @@ -752,7 +752,12 @@ public String getParameter(final String name) { } Deque params = queryParameters.get(name); if (params == null) { - final FormData parsedFormData = parseFormData(); + FormData parsedFormData; + try { + parsedFormData = parseFormData(); + } catch (Exception e) { + throw new IllegalStateException(e); + } if (parsedFormData != null) { FormData.FormValue res = parsedFormData.getFirst(name); if (res == null || res.isFileItem() && !res.isBigField()) { @@ -772,7 +777,12 @@ public Enumeration getParameterNames() { queryParameters = exchange.getQueryParameters(); } final Set parameterNames = new HashSet<>(queryParameters.keySet()); - final FormData parsedFormData = parseFormData(); + FormData parsedFormData; + try { + parsedFormData = parseFormData(); + } catch (Exception e) { + throw new IllegalStateException(e); + } if (parsedFormData != null) { Iterator it = parsedFormData.iterator(); while (it.hasNext()) { @@ -800,7 +810,12 @@ public String[] getParameterValues(final String name) { ret.add(param); } } - final FormData parsedFormData = parseFormData(); + FormData parsedFormData; + try { + parsedFormData = parseFormData(); + } catch (Exception e) { + throw new IllegalStateException(e); + } if (parsedFormData != null) { Deque res = parsedFormData.get(name); if (res != null) { @@ -827,7 +842,12 @@ public Map getParameterMap() { arrayMap.put(entry.getKey(), new ArrayList<>(entry.getValue())); } - final FormData parsedFormData = parseFormData(); + FormData parsedFormData; + try { + parsedFormData = parseFormData(); + } catch (Exception e) { + throw new IllegalStateException(e); + } if (parsedFormData != null) { Iterator it = parsedFormData.iterator(); while (it.hasNext()) { @@ -860,9 +880,13 @@ public Map getParameterMap() { return ret; } - private FormData parseFormData() { + private FormData parseFormData() throws IOException{ if(formParsingException != null) { - throw formParsingException; + if(this.formParsingException instanceof IOException) { + throw (IOException) this.formParsingException; + } else { + throw (RuntimeException) this.formParsingException; + } } if (parsedFormData == null) { if (readStarted) { @@ -877,11 +901,14 @@ private FormData parseFormData() { try { return parsedFormData = parser.parseBlocking(); } catch (RequestTooBigException | MultiPartParserDefinition.FileTooLargeException e) { - throw formParsingException = new IllegalStateException(e); + formParsingException = new IllegalStateException(e); + throw (IllegalStateException)formParsingException; } catch (RuntimeException e) { - throw formParsingException = e; + formParsingException = e; + throw e; } catch (IOException e) { - throw formParsingException = new RuntimeException(e); + formParsingException = e; + throw e; } } return parsedFormData;