//
// ========================================================================
-// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
+// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
import java.net.URLConnection;
import java.nio.channels.FileChannel;
import java.nio.channels.ReadableByteChannel;
+import java.nio.file.InvalidPathException;
import java.nio.file.StandardOpenOption;
import java.security.Permission;
import org.eclipse.jetty.util.IO;
+import org.eclipse.jetty.util.StringUtil;
import org.eclipse.jetty.util.URIUtil;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
{
// Try standard API to convert URL to file.
file =new File(url.toURI());
+ assertValidPath(file.toString());
}
catch (URISyntaxException e)
{
_file=file;
_uri=normalizeURI(_file,url.toURI());
- _alias=checkAlias(_file);
+ _alias=checkFileAlias(_file);
}
/* -------------------------------------------------------- */
_file=file;
URI file_uri=_file.toURI();
_uri=normalizeURI(_file,uri);
-
- if (!_uri.equals(file_uri.toString()))
- {
- // URI and File URI are different. Is it just an encoding difference?
- if (!file_uri.toString().equals(URIUtil.decodePath(uri.toString())))
- _alias=_file.toURI();
- else
- _alias=checkAlias(_file);
- }
+ assertValidPath(file.toString());
+
+ // Is it a URI alias?
+ if (!URIUtil.equalsIgnoreEncodings(_uri,file_uri.toString()))
+ _alias=_file.toURI();
else
- _alias=checkAlias(_file);
+ _alias=checkFileAlias(_file);
}
/* -------------------------------------------------------- */
FileResource(File file)
{
+ assertValidPath(file.toString());
_file=file;
_uri=normalizeURI(_file,_file.toURI());
- _alias=checkAlias(_file);
+ _alias=checkFileAlias(_file);
}
/* -------------------------------------------------------- */
}
/* -------------------------------------------------------- */
- private static URI checkAlias(File file)
+ private static URI checkFileAlias(File file)
{
try
{
if (!abs.equals(can))
{
- LOG.debug("ALIAS abs={} can={}",abs,can);
+ if (LOG.isDebugEnabled())
+ LOG.debug("ALIAS abs={} can={}",abs,can);
URI alias=new File(can).toURI();
// Have to encode the path as File.toURI does not!
public Resource addPath(String path)
throws IOException,MalformedURLException
{
+ assertValidPath(path);
path = org.eclipse.jetty.util.URIUtil.canonicalPath(path);
if (path==null)
}
catch(final URISyntaxException e)
{
- throw new MalformedURLException(){{initCause(e);}};
+ throw new InvalidPathException(path, e.getMessage());
}
return new FileResource(uri);
}
-
-
+
+ private void assertValidPath(String path)
+ {
+ int idx = StringUtil.indexOfControlChars(path);
+ if (idx >= 0)
+ {
+ throw new InvalidPathException(path, "Invalid Character at index " + idx);
+ }
+ }
+
/* ------------------------------------------------------------ */
@Override
public URI getAlias()