Issue #2560 - Review of PathResource exception handling
Signed-off-by: Joakim Erdfelt <joakim.erdfelt@gmail.com>
This commit is contained in:
parent
bc16b6efae
commit
65de2c6690
|
@ -18,6 +18,11 @@
|
|||
|
||||
package org.eclipse.jetty.servlet;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.anyOf;
|
||||
import static org.hamcrest.CoreMatchers.containsString;
|
||||
import static org.hamcrest.CoreMatchers.is;
|
||||
import static org.hamcrest.CoreMatchers.not;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.junit.Assume.assumeTrue;
|
||||
|
||||
|
@ -38,9 +43,11 @@ import javax.servlet.FilterConfig;
|
|||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletRequest;
|
||||
import javax.servlet.ServletResponse;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.eclipse.jetty.http.DateGenerator;
|
||||
import org.eclipse.jetty.http.HttpContent;
|
||||
import org.eclipse.jetty.http.HttpTester;
|
||||
import org.eclipse.jetty.server.HttpConfiguration;
|
||||
import org.eclipse.jetty.server.LocalConnector;
|
||||
import org.eclipse.jetty.server.ResourceContentFactory;
|
||||
|
@ -1248,6 +1255,19 @@ public class DefaultServletTest
|
|||
assertResponseContains("Content-Encoding: gzip",response);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testControlCharacter() throws Exception
|
||||
{
|
||||
FS.ensureDirExists(docRoot);
|
||||
ServletHolder defholder = context.addServlet(DefaultServlet.class, "/");
|
||||
defholder.setInitParameter("resourceBase", docRoot.getAbsolutePath());
|
||||
|
||||
String rawResponse = connector.getResponse("GET /context/%0a HTTP/1.1\r\nHost: local\r\nConnection: close\r\n\r\n");
|
||||
HttpTester.Response response = HttpTester.parseResponse(rawResponse);
|
||||
assertThat("Response.status", response.getStatus(), anyOf(is(HttpServletResponse.SC_NOT_FOUND), is(HttpServletResponse.SC_INTERNAL_SERVER_ERROR)));
|
||||
assertThat("Response.content", response.getContent(), is(not(containsString(docRoot.toString()))));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testIfModifiedSmall() throws Exception
|
||||
{
|
||||
|
|
|
@ -204,17 +204,24 @@ public class PathResource extends Resource
|
|||
* @param parent the parent path resource
|
||||
* @param childPath the child sub path
|
||||
*/
|
||||
private PathResource(PathResource parent, String childPath) throws MalformedURLException
|
||||
private PathResource(PathResource parent, String childPath)
|
||||
{
|
||||
// Calculate the URI and the path separately, so that any aliasing done by
|
||||
// FileSystem.getPath(path,childPath) is visiable as a difference to the URI
|
||||
// FileSystem.getPath(path,childPath) is visible as a difference to the URI
|
||||
// obtained via URIUtil.addDecodedPath(uri,childPath)
|
||||
|
||||
this.path = parent.path.getFileSystem().getPath(parent.path.toString(), childPath);
|
||||
if (isDirectory() &&!childPath.endsWith("/"))
|
||||
childPath+="/";
|
||||
this.uri = URIUtil.addPath(parent.uri,childPath);
|
||||
this.alias = checkAliasPath();
|
||||
try
|
||||
{
|
||||
this.path = parent.path.getFileSystem().getPath(parent.path.toString(), childPath);
|
||||
if (isDirectory() && !childPath.endsWith("/"))
|
||||
childPath += "/";
|
||||
this.uri = URIUtil.addPath(parent.uri, childPath);
|
||||
this.alias = checkAliasPath();
|
||||
}
|
||||
catch(InvalidPathException e)
|
||||
{
|
||||
throw (InvalidPathException) new InvalidPathException(childPath, e.getReason()).initCause(e);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -242,10 +249,6 @@ public class PathResource extends Resource
|
|||
{
|
||||
path = Paths.get(uri);
|
||||
}
|
||||
catch (InvalidPathException e)
|
||||
{
|
||||
throw e;
|
||||
}
|
||||
catch (IllegalArgumentException e)
|
||||
{
|
||||
throw e;
|
||||
|
@ -286,7 +289,7 @@ public class PathResource extends Resource
|
|||
}
|
||||
|
||||
@Override
|
||||
public Resource addPath(final String subpath) throws IOException, MalformedURLException
|
||||
public Resource addPath(final String subpath) throws IOException
|
||||
{
|
||||
String cpath = URIUtil.canonicalPath(subpath);
|
||||
|
||||
|
|
Loading…
Reference in New Issue