From 7dada08bc8358093b5e09b58cbfc4573513e1798 Mon Sep 17 00:00:00 2001 From: Raymond Augé Date: Mon, 11 May 2020 11:41:47 -0400 Subject: Bug 562843 - Do not decode already decoded servletPaths Signed-off-by: Raymond Augé --- .../equinox/http/servlet/testbase/AllTests.java | 4 +- .../http/servlet/tests/Bug562843_2_Test.java | 83 ++++++++++++++++++++++ 2 files changed, 86 insertions(+), 1 deletion(-) create mode 100644 bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/Bug562843_2_Test.java diff --git a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/testbase/AllTests.java b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/testbase/AllTests.java index 60bfe3428..809779fa0 100644 --- a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/testbase/AllTests.java +++ b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/testbase/AllTests.java @@ -15,6 +15,7 @@ package org.eclipse.equinox.http.servlet.testbase; import org.eclipse.equinox.http.servlet.tests.AuthenticationTest; import org.eclipse.equinox.http.servlet.tests.Bug500783_Test; +import org.eclipse.equinox.http.servlet.tests.Bug562843_2_Test; import org.eclipse.equinox.http.servlet.tests.Bug562843_Test; import org.eclipse.equinox.http.servlet.tests.ContextHelperCustomizerTests; import org.eclipse.equinox.http.servlet.tests.DispatchingTest; @@ -98,7 +99,8 @@ import org.junit.runners.Suite.SuiteClasses; TestUpload.class, ContextHelperCustomizerTests.class, Bug500783_Test.class, - Bug562843_Test.class + Bug562843_Test.class, + Bug562843_2_Test.class }) public class AllTests { // see @SuiteClasses diff --git a/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/Bug562843_2_Test.java b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/Bug562843_2_Test.java new file mode 100644 index 000000000..29cd10497 --- /dev/null +++ b/bundles/org.eclipse.equinox.http.servlet.tests/src/org/eclipse/equinox/http/servlet/tests/Bug562843_2_Test.java @@ -0,0 +1,83 @@ +package org.eclipse.equinox.http.servlet.tests; + +import java.io.IOException; +import java.io.PrintWriter; +import java.net.URLEncoder; +import java.util.Dictionary; +import java.util.Hashtable; +import java.util.concurrent.atomic.AtomicReference; + +import javax.servlet.Servlet; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.equinox.http.servlet.testbase.BaseTest; +import org.junit.Assert; +import org.junit.Test; +import org.osgi.service.http.whiteboard.HttpWhiteboardConstants; + +public class Bug562843_2_Test extends BaseTest { + + @Test + public void test_Bug562843_testEncodedSpace() throws Exception { + final AtomicReference requestURI = new AtomicReference<>(); + final AtomicReference servletPath = new AtomicReference<>(); + final AtomicReference pathInfo = new AtomicReference<>(); + Servlet servlet = new HttpServlet() { + private static final long serialVersionUID = 1L; + @Override + protected void doGet( + final HttpServletRequest req, final HttpServletResponse resp) + throws IOException { + requestURI.set(req.getRequestURI()); + servletPath.set(req.getServletPath()); + pathInfo.set(req.getPathInfo()); + PrintWriter writer = resp.getWriter(); + writer.write("OK"); + } + }; + Dictionary props = new Hashtable<>(); + props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "Bug 562843"); + props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/Bug562843/*"); + registrations.add(getBundleContext().registerService(Servlet.class, servlet, props)); + String path = "Bug562843/" + URLEncoder.encode("topic .html", "UTF-8"); + String result = requestAdvisor.request(path); + Assert.assertEquals("OK", result); + Assert.assertEquals("/Bug562843/topic+.html", requestURI.get()); + Assert.assertEquals("/Bug562843", servletPath.get()); + Assert.assertEquals("/topic .html", pathInfo.get()); + } + + + @Test + public void test_Bug562843_testEncodedPercentSign() throws Exception { + final AtomicReference requestURI = new AtomicReference<>(); + final AtomicReference servletPath = new AtomicReference<>(); + final AtomicReference pathInfo = new AtomicReference<>(); + Servlet servlet = new HttpServlet() { + private static final long serialVersionUID = 1L; + @Override + protected void doGet( + final HttpServletRequest req, final HttpServletResponse resp) + throws IOException { + requestURI.set(req.getRequestURI()); + servletPath.set(req.getServletPath()); + pathInfo.set(req.getPathInfo()); + PrintWriter writer = resp.getWriter(); + writer.write("OK"); + } + }; + Dictionary props = new Hashtable<>(); + props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_NAME, "Bug 562843"); + props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/Bug562843/*"); + registrations.add(getBundleContext().registerService(Servlet.class, servlet, props)); + String path = "Bug562843/" + URLEncoder.encode("topic%.html", "UTF-8"); + String result = requestAdvisor.request(path); + Assert.assertEquals("OK", result); + Assert.assertEquals("/Bug562843/topic%25.html", requestURI.get()); + Assert.assertEquals("/Bug562843", servletPath.get()); + Assert.assertEquals("/topic%.html", pathInfo.get()); + } + +} -- cgit v1.2.3