You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bu...@apache.org on 2020/04/24 11:24:17 UTC

[cxf] branch master updated: CXF-8269 Servlet Transport: allow any whitespace character as param-value separator

This is an automated email from the ASF dual-hosted git repository.

buhhunyx pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/master by this push:
     new 706dd02  CXF-8269 Servlet Transport: allow any whitespace character as param-value separator
706dd02 is described below

commit 706dd02fd37597967a10d5a5c1ad526b995f88ea
Author: Alexey Markevich <bu...@gmail.com>
AuthorDate: Wed Apr 22 21:34:14 2020 +0300

    CXF-8269 Servlet Transport: allow any whitespace character as
    param-value separator
---
 .../cxf/transport/servlet/AbstractHTTPServlet.java | 54 +++++++--------
 .../test/resources/jaxrs_dispatch/WEB-INF/web.xml  | 77 ++++++++++++----------
 2 files changed, 67 insertions(+), 64 deletions(-)

diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
index 3353399..538da28 100644
--- a/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
+++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/servlet/AbstractHTTPServlet.java
@@ -21,11 +21,11 @@ package org.apache.cxf.transport.servlet;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.Enumeration;
 import java.util.HashMap;
-import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -39,7 +39,6 @@ import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
 import javax.servlet.ServletException;
-import javax.servlet.ServletOutputStream;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.http.HttpServlet;
@@ -178,36 +177,32 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
         });
     }
 
-    protected static List<Pattern> parseListSequence(String values) {
+    private static List<Pattern> parseListSequence(String values) {
         if (values != null) {
-            List<Pattern> list = new LinkedList<>();
-            String[] pathValues = values.split(" ");
-            for (String value : pathValues) {
-                String theValue = value.trim();
-                if (theValue.length() > 0) {
-                    list.add(Pattern.compile(theValue));
+            List<Pattern> list = new ArrayList<>();
+            for (String value : values.split("\\s")) {
+                if (!value.isEmpty()) {
+                    list.add(Pattern.compile(value));
                 }
             }
+            ((ArrayList<?>)list).trimToSize();
             return list;
         }
         return null;
     }
 
-    protected static Map<String, String> parseMapSequence(String sequence) {
+    private static Map<String, String> parseMapSequence(String sequence) {
         if (sequence != null) {
             sequence = sequence.trim();
             Map<String, String> map = new HashMap<>();
-            String[] pairs = sequence.split(" ");
-            for (String pair : pairs) {
-                String thePair = pair.trim();
-                if (thePair.length() == 0) {
-                    continue;
-                }
-                String[] value = thePair.split("=");
-                if (value.length == 2) {
-                    map.put(value[0].trim(), value[1].trim());
-                } else {
-                    map.put(thePair, "");
+            for (String pair : sequence.split("\\s")) {
+                if (!pair.isEmpty()) {
+                    String[] value = pair.split("=");
+                    if (value.length == 2) {
+                        map.put(value[0], value[1]);
+                    } else {
+                        map.put(pair, "");
+                    }
                 }
             }
             return map;
@@ -330,7 +325,7 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
         }
         if (redirectQueryCheck) {
             String queryString = request.getQueryString();
-            if (queryString != null && queryString.length() > 0) {
+            if (queryString != null && !queryString.isEmpty()) {
                 path += "?" + queryString;
             }
         }
@@ -347,13 +342,12 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
     protected void serveStaticContent(HttpServletRequest request,
                                       HttpServletResponse response,
                                       String pathInfo) throws ServletException {
-        InputStream is = getResourceAsStream(pathInfo);
-        if (is == null) {
-            throw new ServletException("Static resource " + pathInfo + " is not available");
-        }
-        try {
+        try (InputStream is = getResourceAsStream(pathInfo)) {
+            if (is == null) {
+                throw new ServletException("Static resource " + pathInfo + " is not available");
+            }
             int ind = pathInfo.lastIndexOf('.');
-            if (ind != -1 && ind < pathInfo.length()) {
+            if (ind > 0) {
                 String type = getStaticResourceContentType(pathInfo.substring(ind + 1));
                 if (type != null) {
                     response.setContentType(type);
@@ -363,9 +357,7 @@ public abstract class AbstractHTTPServlet extends HttpServlet implements Filter
             if (cacheControl != null) {
                 response.setHeader("Cache-Control", cacheControl.trim());
             }
-            ServletOutputStream os = response.getOutputStream();
-            IOUtils.copyAndCloseInput(is, os);
-            os.flush();
+            IOUtils.copy(is, response.getOutputStream());
         } catch (IOException ex) {
             throw new ServletException("Static resource " + pathInfo
                                        + " can not be written to the output stream");
diff --git a/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/web.xml b/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/web.xml
index 3795f7c..470c541 100644
--- a/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/web.xml
+++ b/systests/jaxrs/src/test/resources/jaxrs_dispatch/WEB-INF/web.xml
@@ -27,26 +27,27 @@
     </context-param>
     <listener>
         <listener-class>
-                        org.springframework.web.context.ContextLoaderListener
-                </listener-class>
+            org.springframework.web.context.ContextLoaderListener
+        </listener-class>
     </listener>
+
     <servlet>
-        <servlet-name>CXFServlet</servlet-name>
         <display-name>CXF Servlet</display-name>
+        <servlet-name>CXFServlet</servlet-name>
         <servlet-class>
-                        org.apache.cxf.transport.servlet.CXFServlet
-                </servlet-class>
+            org.apache.cxf.transport.servlet.CXFServlet
+        </servlet-class>
         <init-param>
             <param-name>redirects-list</param-name>
             <param-value>
-                  /
-                </param-value>
+                /
+            </param-value>
         </init-param>
         <init-param>
             <param-name>redirect-attributes</param-name>
             <param-value>
-                  javax.servlet.include.request_uri
-                </param-value>
+                javax.servlet.include.request_uri
+            </param-value>
         </init-param>
         <init-param>
             <param-name>redirect-servlet-name</param-name>
@@ -58,17 +59,18 @@
         <servlet-name>CXFServlet</servlet-name>
         <url-pattern>/the/*</url-pattern>
     </servlet-mapping>
+
     <servlet>
-        <servlet-name>RedirectIncludeCXFServlet</servlet-name>
         <display-name>Redirect CXF Servlet</display-name>
+        <servlet-name>RedirectIncludeCXFServlet</servlet-name>
         <servlet-class>
-                        org.apache.cxf.transport.servlet.CXFServlet
-                </servlet-class>
+            org.apache.cxf.transport.servlet.CXFServlet
+        </servlet-class>
         <init-param>
             <param-name>redirects-list</param-name>
             <param-value>
-                  /(\w)+.html
-                </param-value>
+                /(\w)+.html
+            </param-value>
         </init-param>
         <init-param>
             <param-name>redirect-with-include</param-name>
@@ -84,17 +86,18 @@
         <servlet-name>RedirectIncludeCXFServlet</servlet-name>
         <url-pattern>/book_include.html</url-pattern>
     </servlet-mapping>
+
     <servlet>
-        <servlet-name>RedirectCXFServlet</servlet-name>
         <display-name>Redirect CXF Servlet</display-name>
+        <servlet-name>RedirectCXFServlet</servlet-name>
         <servlet-class>
-                        org.apache.cxf.transport.servlet.CXFServlet
-                </servlet-class>
+            org.apache.cxf.transport.servlet.CXFServlet
+        </servlet-class>
         <init-param>
             <param-name>redirects-list</param-name>
             <param-value>
-                  /(\w)+.html
-                </param-value>
+                /(\w)+.html
+            </param-value>
         </init-param>
         <init-param>
             <param-name>redirect-servlet-path</param-name>
@@ -106,15 +109,20 @@
         <servlet-name>RedirectCXFServlet</servlet-name>
         <url-pattern>/book.html</url-pattern>
     </servlet-mapping>
+
     <servlet>
-        <servlet-name>DefaultCXFServlet</servlet-name>
         <display-name>Default CXF Servlet</display-name>
+        <servlet-name>DefaultCXFServlet</servlet-name>
         <servlet-class>
-                        org.apache.cxf.transport.servlet.CXFServlet
-                </servlet-class>
+            org.apache.cxf.transport.servlet.CXFServlet
+        </servlet-class>
         <init-param>
             <param-name>static-resources-list</param-name>
-            <param-value>/(\w)+.html</param-value>
+            <!-- keep tab identation -->
+            <param-value>
+				/(\w)+.html
+				/(\w)+.css
+            </param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>
@@ -122,23 +130,24 @@
         <servlet-name>DefaultCXFServlet</servlet-name>
         <url-pattern>/static/*</url-pattern>
     </servlet-mapping>
+
     <servlet>
-        <servlet-name>WelcomeCXFServlet</servlet-name>
         <display-name>Welcome CXF Servlet</display-name>
+        <servlet-name>WelcomeCXFServlet</servlet-name>
         <servlet-class>
-                        org.apache.cxf.transport.servlet.CXFServlet
-                </servlet-class>
+            org.apache.cxf.transport.servlet.CXFServlet
+        </servlet-class>
         <init-param>
             <param-name>redirects-list</param-name>
             <param-value>
-                  /
-                </param-value>
+                /
+            </param-value>
         </init-param>
         <init-param>
             <param-name>redirect-attributes</param-name>
             <param-value>
-                  javax.servlet.include.request_uri
-                </param-value>
+                javax.servlet.include.request_uri
+            </param-value>
         </init-param>
         <init-param>
             <param-name>redirect-servlet-name</param-name>
@@ -150,12 +159,13 @@
         <servlet-name>WelcomeCXFServlet</servlet-name>
         <url-pattern>/welcome/*</url-pattern>
     </servlet-mapping>
+
     <servlet>
-        <servlet-name>WelcomeCXFServlet2</servlet-name>
         <display-name>Welcome CXF Servlet2</display-name>
+        <servlet-name>WelcomeCXFServlet2</servlet-name>
         <servlet-class>
-                        org.apache.cxf.transport.servlet.CXFServlet
-                </servlet-class>
+            org.apache.cxf.transport.servlet.CXFServlet
+        </servlet-class>
         <init-param>
             <param-name>static-welcome-file</param-name>
             <param-value>/welcomeBook.html</param-value>
@@ -170,6 +180,7 @@
         <servlet-name>WelcomeCXFServlet2</servlet-name>
         <url-pattern>/welcome2/*</url-pattern>
     </servlet-mapping>
+
     <welcome-file-list>
         <welcome-file>welcomeBook.html</welcome-file>
     </welcome-file-list>