public void testNormalizeUnixWin() throws Exception {
// Normalize (Unix Separator)
assertEquals("/a/c/", FilenameUtils.normalize("/a/b/../c/", true));
assertEquals("/a/c/", FilenameUtils.normalize("\\a\\b\\..\\c\\", true));
// Normalize (Windows Separator)
assertEquals("\\a\\c\\", FilenameUtils.normalize("/a/b/../c/", false));
assertEquals("\\a\\c\\", FilenameUtils.normalize("\\a\\b\\..\\c\\", false));
}
private static void normalize_() {
System.out.println("*** Normalization ***");
String filename = "X:\\JCG\\.\\org.apache.commons.io.FilenameUtils Example\\notes.txt";
System.out.println("Before: " + filename);
String normalized = FilenameUtils.normalize(filename);
System.out.println("After single dot normalization: " + normalized);
filename = "X:\\JCG\\articles\\..\\notes.txt";
System.out.println("Before: " + filename);
normalized = FilenameUtils.normalize(filename);
System.out.println("After double dot normalization: " + normalized);
}
String filename = "C:/commons/io/../lang/project.xml";
String normalized = FilenameUtils.normalize(filename);
// result is "C:/commons/lang/project.xml"
public void testNormalize() throws Exception {
assertEquals(null, FilenameUtils.normalize(null));
assertEquals(null, FilenameUtils.normalize(":"));
assertEquals(null, FilenameUtils.normalize("1:\\a\\b\\c.txt"));
assertEquals(null, FilenameUtils.normalize("1:"));
assertEquals(null, FilenameUtils.normalize("1:a"));
assertEquals(null, FilenameUtils.normalize("\\\\\\a\\b\\c.txt"));
assertEquals(null, FilenameUtils.normalize("\\\\a"));
assertEquals("a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("a\\b/c.txt"));
assertEquals("" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\a\\b/c.txt"));
assertEquals("C:" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("C:\\a\\b/c.txt"));
assertEquals("" + SEP + "" + SEP + "server" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\server\\a\\b/c.txt"));
assertEquals("~" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("~\\a\\b/c.txt"));
assertEquals("~user" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("~user\\a\\b/c.txt"));
assertEquals("a" + SEP + "c", FilenameUtils.normalize("a/b/../c"));
assertEquals("c", FilenameUtils.normalize("a/b/../../c"));
assertEquals("c" + SEP, FilenameUtils.normalize("a/b/../../c/"));
assertEquals(null, FilenameUtils.normalize("a/b/../../../c"));
assertEquals("a" + SEP, FilenameUtils.normalize("a/b/.."));
assertEquals("a" + SEP, FilenameUtils.normalize("a/b/../"));
assertEquals("", FilenameUtils.normalize("a/b/../.."));
assertEquals("", FilenameUtils.normalize("a/b/../../"));
assertEquals(null, FilenameUtils.normalize("a/b/../../.."));
assertEquals("a" + SEP + "d", FilenameUtils.normalize("a/b/../c/../d"));
assertEquals("a" + SEP + "d" + SEP, FilenameUtils.normalize("a/b/../c/../d/"));
assertEquals("a" + SEP + "b" + SEP + "d", FilenameUtils.normalize("a/b//d"));
assertEquals("a" + SEP + "b" + SEP, FilenameUtils.normalize("a/b/././."));
assertEquals("a" + SEP + "b" + SEP, FilenameUtils.normalize("a/b/./././"));
assertEquals("a" + SEP, FilenameUtils.normalize("./a/"));
assertEquals("a", FilenameUtils.normalize("./a"));
assertEquals("", FilenameUtils.normalize("./"));
assertEquals("", FilenameUtils.normalize("."));
assertEquals(null, FilenameUtils.normalize("../a"));
assertEquals(null, FilenameUtils.normalize(".."));
assertEquals("", FilenameUtils.normalize(""));
assertEquals(SEP + "a", FilenameUtils.normalize("/a"));
assertEquals(SEP + "a" + SEP, FilenameUtils.normalize("/a/"));
assertEquals(SEP + "a" + SEP + "c", FilenameUtils.normalize("/a/b/../c"));
assertEquals(SEP + "c", FilenameUtils.normalize("/a/b/../../c"));
assertEquals(null, FilenameUtils.normalize("/a/b/../../../c"));
assertEquals(SEP + "a" + SEP, FilenameUtils.normalize("/a/b/.."));
assertEquals(SEP + "", FilenameUtils.normalize("/a/b/../.."));
assertEquals(null, FilenameUtils.normalize("/a/b/../../.."));
assertEquals(SEP + "a" + SEP + "d", FilenameUtils.normalize("/a/b/../c/../d"));
assertEquals(SEP + "a" + SEP + "b" + SEP + "d", FilenameUtils.normalize("/a/b//d"));
assertEquals(SEP + "a" + SEP + "b" + SEP, FilenameUtils.normalize("/a/b/././."));
assertEquals(SEP + "a", FilenameUtils.normalize("/./a"));
assertEquals(SEP + "", FilenameUtils.normalize("/./"));
assertEquals(SEP + "", FilenameUtils.normalize("/."));
assertEquals(null, FilenameUtils.normalize("/../a"));
assertEquals(null, FilenameUtils.normalize("/.."));
assertEquals(SEP + "", FilenameUtils.normalize("/"));
assertEquals("~" + SEP + "a", FilenameUtils.normalize("~/a"));
assertEquals("~" + SEP + "a" + SEP, FilenameUtils.normalize("~/a/"));
assertEquals("~" + SEP + "a" + SEP + "c", FilenameUtils.normalize("~/a/b/../c"));
assertEquals("~" + SEP + "c", FilenameUtils.normalize("~/a/b/../../c"));
assertEquals(null, FilenameUtils.normalize("~/a/b/../../../c"));
assertEquals("~" + SEP + "a" + SEP, FilenameUtils.normalize("~/a/b/.."));
assertEquals("~" + SEP + "", FilenameUtils.normalize("~/a/b/../.."));
assertEquals(null, FilenameUtils.normalize("~/a/b/../../.."));
assertEquals("~" + SEP + "a" + SEP + "d", FilenameUtils.normalize("~/a/b/../c/../d"));
assertEquals("~" + SEP + "a" + SEP + "b" + SEP + "d", FilenameUtils.normalize("~/a/b//d"));
assertEquals("~" + SEP + "a" + SEP + "b" + SEP, FilenameUtils.normalize("~/a/b/././."));
assertEquals("~" + SEP + "a", FilenameUtils.normalize("~/./a"));
assertEquals("~" + SEP, FilenameUtils.normalize("~/./"));
assertEquals("~" + SEP, FilenameUtils.normalize("~/."));
assertEquals(null, FilenameUtils.normalize("~/../a"));
assertEquals(null, FilenameUtils.normalize("~/.."));
assertEquals("~" + SEP, FilenameUtils.normalize("~/"));
assertEquals("~" + SEP, FilenameUtils.normalize("~"));
assertEquals("~user" + SEP + "a", FilenameUtils.normalize("~user/a"));
assertEquals("~user" + SEP + "a" + SEP, FilenameUtils.normalize("~user/a/"));
assertEquals("~user" + SEP + "a" + SEP + "c", FilenameUtils.normalize("~user/a/b/../c"));
assertEquals("~user" + SEP + "c", FilenameUtils.normalize("~user/a/b/../../c"));
assertEquals(null, FilenameUtils.normalize("~user/a/b/../../../c"));
assertEquals("~user" + SEP + "a" + SEP, FilenameUtils.normalize("~user/a/b/.."));
assertEquals("~user" + SEP + "", FilenameUtils.normalize("~user/a/b/../.."));
assertEquals(null, FilenameUtils.normalize("~user/a/b/../../.."));
assertEquals("~user" + SEP + "a" + SEP + "d", FilenameUtils.normalize("~user/a/b/../c/../d"));
assertEquals("~user" + SEP + "a" + SEP + "b" + SEP + "d", FilenameUtils.normalize("~user/a/b//d"));
assertEquals("~user" + SEP + "a" + SEP + "b" + SEP, FilenameUtils.normalize("~user/a/b/././."));
assertEquals("~user" + SEP + "a", FilenameUtils.normalize("~user/./a"));
assertEquals("~user" + SEP + "", FilenameUtils.normalize("~user/./"));
assertEquals("~user" + SEP + "", FilenameUtils.normalize("~user/."));
assertEquals(null, FilenameUtils.normalize("~user/../a"));
assertEquals(null, FilenameUtils.normalize("~user/.."));
assertEquals("~user" + SEP, FilenameUtils.normalize("~user/"));
assertEquals("~user" + SEP, FilenameUtils.normalize("~user"));
assertEquals("C:" + SEP + "a", FilenameUtils.normalize("C:/a"));
assertEquals("C:" + SEP + "a" + SEP, FilenameUtils.normalize("C:/a/"));
assertEquals("C:" + SEP + "a" + SEP + "c", FilenameUtils.normalize("C:/a/b/../c"));
assertEquals("C:" + SEP + "c", FilenameUtils.normalize("C:/a/b/../../c"));
assertEquals(null, FilenameUtils.normalize("C:/a/b/../../../c"));
assertEquals("C:" + SEP + "a" + SEP, FilenameUtils.normalize("C:/a/b/.."));
assertEquals("C:" + SEP + "", FilenameUtils.normalize("C:/a/b/../.."));
assertEquals(null, FilenameUtils.normalize("C:/a/b/../../.."));
assertEquals("C:" + SEP + "a" + SEP + "d", FilenameUtils.normalize("C:/a/b/../c/../d"));
assertEquals("C:" + SEP + "a" + SEP + "b" + SEP + "d", FilenameUtils.normalize("C:/a/b//d"));
assertEquals("C:" + SEP + "a" + SEP + "b" + SEP, FilenameUtils.normalize("C:/a/b/././."));
assertEquals("C:" + SEP + "a", FilenameUtils.normalize("C:/./a"));
assertEquals("C:" + SEP + "", FilenameUtils.normalize("C:/./"));
assertEquals("C:" + SEP + "", FilenameUtils.normalize("C:/."));
assertEquals(null, FilenameUtils.normalize("C:/../a"));
assertEquals(null, FilenameUtils.normalize("C:/.."));
assertEquals("C:" + SEP + "", FilenameUtils.normalize("C:/"));
assertEquals("C:" + "a", FilenameUtils.normalize("C:a"));
assertEquals("C:" + "a" + SEP, FilenameUtils.normalize("C:a/"));
assertEquals("C:" + "a" + SEP + "c", FilenameUtils.normalize("C:a/b/../c"));
assertEquals("C:" + "c", FilenameUtils.normalize("C:a/b/../../c"));
assertEquals(null, FilenameUtils.normalize("C:a/b/../../../c"));
assertEquals("C:" + "a" + SEP, FilenameUtils.normalize("C:a/b/.."));
assertEquals("C:" + "", FilenameUtils.normalize("C:a/b/../.."));
assertEquals(null, FilenameUtils.normalize("C:a/b/../../.."));
assertEquals("C:" + "a" + SEP + "d", FilenameUtils.normalize("C:a/b/../c/../d"));
assertEquals("C:" + "a" + SEP + "b" + SEP + "d", FilenameUtils.normalize("C:a/b//d"));
assertEquals("C:" + "a" + SEP + "b" + SEP, FilenameUtils.normalize("C:a/b/././."));
assertEquals("C:" + "a", FilenameUtils.normalize("C:./a"));
assertEquals("C:" + "", FilenameUtils.normalize("C:./"));
assertEquals("C:" + "", FilenameUtils.normalize("C:."));
assertEquals(null, FilenameUtils.normalize("C:../a"));
assertEquals(null, FilenameUtils.normalize("C:.."));
assertEquals("C:" + "", FilenameUtils.normalize("C:"));
assertEquals(SEP + SEP + "server" + SEP + "a", FilenameUtils.normalize("//server/a"));
assertEquals(SEP + SEP + "server" + SEP + "a" + SEP, FilenameUtils.normalize("//server/a/"));
assertEquals(SEP + SEP + "server" + SEP + "a" + SEP + "c", FilenameUtils.normalize("//server/a/b/../c"));
assertEquals(SEP + SEP + "server" + SEP + "c", FilenameUtils.normalize("//server/a/b/../../c"));
assertEquals(null, FilenameUtils.normalize("//server/a/b/../../../c"));
assertEquals(SEP + SEP + "server" + SEP + "a" + SEP, FilenameUtils.normalize("//server/a/b/.."));
assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalize("//server/a/b/../.."));
assertEquals(null, FilenameUtils.normalize("//server/a/b/../../.."));
assertEquals(SEP + SEP + "server" + SEP + "a" + SEP + "d", FilenameUtils.normalize("//server/a/b/../c/../d"));
assertEquals(SEP + SEP + "server" + SEP + "a" + SEP + "b" + SEP + "d", FilenameUtils.normalize("//server/a/b//d"));
assertEquals(SEP + SEP + "server" + SEP + "a" + SEP + "b" + SEP, FilenameUtils.normalize("//server/a/b/././."));
assertEquals(SEP + SEP + "server" + SEP + "a", FilenameUtils.normalize("//server/./a"));
assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalize("//server/./"));
assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalize("//server/."));
assertEquals(null, FilenameUtils.normalize("//server/../a"));
assertEquals(null, FilenameUtils.normalize("//server/.."));
assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalize("//server/"));
}
public static void main(String[] args) {
String filename = "C:/commons/io/../lang/project.xml";
String normalized = FilenameUtils.normalize(filename);
System.out.println(normalized);
}
private void addNewFiles(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String artifactRelPath;
artifactRelPath = request.getRequestURI().substring(request.getServletPath().length() + 1 );
File destination = new File(FilenameUtils.normalize(this.saveDir + artifactRelPath));
if (destination.exists()) {
LOG.info("File to be added already exist: " + destination.getPath());
response.setContentType("application/json");
response.getWriter().append(String.format("{ \"error\": \"already exists %s\"}", destination.getPath()));
response.setStatus(HttpServletResponse.SC_FORBIDDEN);
return;
}
// Expected: one part containing zip
try{
Part part = request.getParts().iterator().next();
WSChangeObserver changeObserver = new WSChangeObserver(ChangeType.CHANGE_CREATED, lspDestPath);
if (extract(part.getInputStream(), changeObserver)) {
changeObserver.notifyLSP();
response.setContentType("application/json");
response.getWriter().append(String.format("{ \"created\": \"%s\"}", artifactRelPath));
response.setStatus(HttpServletResponse.SC_CREATED);
} else {
response.setContentType("application/json");
response.getWriter().append(String.format("{ \"error\": \"conflict %s\"}", artifactRelPath));
response.setStatus(HttpServletResponse.SC_CONFLICT);
}
} catch (NoSuchElementException ePart) {
response.setContentType("application/json");
response.getWriter().append(String.format("{ \"error\": \"exception for %s\"}", artifactRelPath));
response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
}
}
private void ensureFileInContentStore(File file)
{
String fileNormalizedAbsoultePath = FilenameUtils.normalize(file.getAbsolutePath());
String rootNormalizedAbsolutePath = FilenameUtils.normalize(rootAbsolutePath);
if (!fileNormalizedAbsoultePath.startsWith(rootNormalizedAbsolutePath))
{
throw new ContentIOException("Access to files outside of content store root is not allowed: " + file);
}
}
private static File normalize(File file) {
String path = file.getAbsolutePath();
return new File(FilenameUtils.normalize(path));
}
public void testNormalize_with_nullbytes() throws Exception {
try {
assertEquals("a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("a\\b/c\u0000.txt"));
} catch (final IllegalArgumentException ignore) {
}
try {
assertEquals("a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\u0000a\\b/c.txt"));
} catch (final IllegalArgumentException ignore) {
}
}
public static String getRuleSetClasspath(RuleSet ruleset) {
final String RESOURCES_PATH = "/resources/";
String filename = FilenameUtils.normalize(StringUtils.chomp(ruleset.getFileName()), true);
int startIndex = filename.lastIndexOf(RESOURCES_PATH);
if (startIndex > -1) {
return filename.substring(startIndex + RESOURCES_PATH.length());
} else {
return filename;
}
}