Skip to content
Open
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 18 additions & 5 deletions src/main/java/org/apache/commons/io/FilenameUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
*/
package org.apache.commons.io;

import java.io.Console;
Comment thread
MiriamCohenDev marked this conversation as resolved.
Outdated
import java.io.File;
import java.util.ArrayDeque;
import java.util.ArrayList;
Expand Down Expand Up @@ -930,15 +931,27 @@ public static int getPrefixLength(final String fileName) {
if (!isSeparator(ch0) || !isSeparator(ch1)) {
return isSeparator(ch0) ? 1 : 0;
}

Comment thread
MiriamCohenDev marked this conversation as resolved.
Outdated
// UNC path: //hostname or //hostname/...
int posUnix = fileName.indexOf(UNIX_NAME_SEPARATOR, 2);
int posWin = fileName.indexOf(WINDOWS_NAME_SEPARATOR, 2);
if (posUnix == NOT_FOUND && posWin == NOT_FOUND || posUnix == 2 || posWin == 2) {

if (posUnix == 2 || posWin == 2) {
return NOT_FOUND;
}
posUnix = posUnix == NOT_FOUND ? posWin : posUnix;
posWin = posWin == NOT_FOUND ? posUnix : posWin;
final int pos = Math.min(posUnix, posWin) + 1;
final String hostnamePart = fileName.substring(2, pos - 1);
int pos;
String hostnamePart;
if(posUnix == NOT_FOUND && posWin == NOT_FOUND){
pos = fileName.length();
hostnamePart = fileName.substring(2);
}
else{
posUnix = posUnix == NOT_FOUND ? posWin : posUnix;
posWin = posWin == NOT_FOUND ? posUnix : posWin;
pos = Math.min(posUnix, posWin) + 1;
hostnamePart = fileName.substring(2, pos - 1);
}

return isValidHostName(hostnamePart) ? pos : NOT_FOUND;
}

Expand Down
33 changes: 18 additions & 15 deletions src/test/java/org/apache/commons/io/FilenameUtilsTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,31 +70,31 @@ public void setUp() throws Exception {
+ " as the parent directory does not exist");
}
try (BufferedOutputStream output3 =
new BufferedOutputStream(Files.newOutputStream(testFile1))) {
new BufferedOutputStream(Files.newOutputStream(testFile1))) {
Comment thread
MiriamCohenDev marked this conversation as resolved.
Outdated
TestUtils.generateTestData(output3, testFile1Size);
}
if (!Files.exists(testFile2.getParent())) {
throw new IOException("Cannot create file " + testFile2
+ " as the parent directory does not exist");
}
try (BufferedOutputStream output2 =
new BufferedOutputStream(Files.newOutputStream(testFile2))) {
new BufferedOutputStream(Files.newOutputStream(testFile2))) {
TestUtils.generateTestData(output2, testFile2Size);
}
if (!Files.exists(testFile1.getParent())) {
throw new IOException("Cannot create file " + testFile1
+ " as the parent directory does not exist");
}
try (BufferedOutputStream output1 =
new BufferedOutputStream(Files.newOutputStream(testFile1))) {
new BufferedOutputStream(Files.newOutputStream(testFile1))) {
TestUtils.generateTestData(output1, testFile1Size);
}
if (!Files.exists(testFile2.getParent())) {
throw new IOException("Cannot create file " + testFile2
+ " as the parent directory does not exist");
}
try (BufferedOutputStream output =
new BufferedOutputStream(Files.newOutputStream(testFile2))) {
new BufferedOutputStream(Files.newOutputStream(testFile2))) {
TestUtils.generateTestData(output, testFile2Size);
}
}
Expand Down Expand Up @@ -192,7 +192,6 @@ void testEqualsNormalized() {
void testEqualsNormalizedError_IO_128() {
assertFalse(FilenameUtils.equalsNormalizedOnSystem("//file.txt", "file.txt"));
assertFalse(FilenameUtils.equalsNormalizedOnSystem("file.txt", "//file.txt"));
assertFalse(FilenameUtils.equalsNormalizedOnSystem("//file.txt", "//file.txt"));
Comment thread
MiriamCohenDev marked this conversation as resolved.
}

@Test
Expand Down Expand Up @@ -275,7 +274,6 @@ void testGetFullPath() {
assertNull(FilenameUtils.getFullPath("1:"));
assertNull(FilenameUtils.getFullPath("1:a"));
assertNull(FilenameUtils.getFullPath("///a/b/c.txt"));
assertNull(FilenameUtils.getFullPath("//a"));
Comment thread
MiriamCohenDev marked this conversation as resolved.

assertEquals("", FilenameUtils.getFullPath(""));

Expand All @@ -288,6 +286,7 @@ void testGetFullPath() {

assertEquals("C:/", FilenameUtils.getFullPath("C:/"));
assertEquals("//server/", FilenameUtils.getFullPath("//server/"));
assertEquals("//server", FilenameUtils.getFullPath("//server"));
assertEquals("~/", FilenameUtils.getFullPath("~"));
assertEquals("~/", FilenameUtils.getFullPath("~/"));
assertEquals("~user/", FilenameUtils.getFullPath("~user"));
Expand Down Expand Up @@ -317,7 +316,6 @@ void testGetFullPathNoEndSeparator() {
assertNull(FilenameUtils.getFullPathNoEndSeparator("1:"));
assertNull(FilenameUtils.getFullPathNoEndSeparator("1:a"));
assertNull(FilenameUtils.getFullPathNoEndSeparator("///a/b/c.txt"));
assertNull(FilenameUtils.getFullPathNoEndSeparator("//a"));
Comment thread
MiriamCohenDev marked this conversation as resolved.

assertEquals("", FilenameUtils.getFullPathNoEndSeparator(""));

Expand All @@ -330,6 +328,7 @@ void testGetFullPathNoEndSeparator() {

assertEquals("C:/", FilenameUtils.getFullPathNoEndSeparator("C:/"));
assertEquals("//server/", FilenameUtils.getFullPathNoEndSeparator("//server/"));
assertEquals("//server", FilenameUtils.getFullPathNoEndSeparator("//server"));
assertEquals("~", FilenameUtils.getFullPathNoEndSeparator("~"));
assertEquals("~/", FilenameUtils.getFullPathNoEndSeparator("~/"));
assertEquals("~user", FilenameUtils.getFullPathNoEndSeparator("~user"));
Expand Down Expand Up @@ -408,12 +407,12 @@ void testGetPath() {
assertNull(FilenameUtils.getPath("1:"));
assertNull(FilenameUtils.getPath("1:a"));
assertNull(FilenameUtils.getPath("///a/b/c.txt"));
assertNull(FilenameUtils.getPath("//a"));
Comment thread
MiriamCohenDev marked this conversation as resolved.

assertEquals("", FilenameUtils.getPath(""));
assertEquals("", FilenameUtils.getPath(DRIVE_C));
assertEquals("", FilenameUtils.getPath("C:/"));
assertEquals("", FilenameUtils.getPath("//server/"));
assertEquals("",FilenameUtils.getPath("//server"));
assertEquals("", FilenameUtils.getPath("~"));
assertEquals("", FilenameUtils.getPath("~/"));
assertEquals("", FilenameUtils.getPath("~user"));
Expand Down Expand Up @@ -450,12 +449,12 @@ void testGetPathNoEndSeparator() {
assertNull(FilenameUtils.getPathNoEndSeparator("1:"));
assertNull(FilenameUtils.getPathNoEndSeparator("1:a"));
assertNull(FilenameUtils.getPathNoEndSeparator("///a/b/c.txt"));
assertNull(FilenameUtils.getPathNoEndSeparator("//a"));
Comment thread
MiriamCohenDev marked this conversation as resolved.

assertEquals("", FilenameUtils.getPathNoEndSeparator(""));
assertEquals("", FilenameUtils.getPathNoEndSeparator(DRIVE_C));
assertEquals("", FilenameUtils.getPathNoEndSeparator("C:/"));
assertEquals("", FilenameUtils.getPathNoEndSeparator("//server/"));
assertEquals("",FilenameUtils.getPathNoEndSeparator("//server"));
assertEquals("", FilenameUtils.getPathNoEndSeparator("~"));
assertEquals("", FilenameUtils.getPathNoEndSeparator("~/"));
assertEquals("", FilenameUtils.getPathNoEndSeparator("~user"));
Expand Down Expand Up @@ -484,7 +483,6 @@ void testGetPrefix() {
assertNull(FilenameUtils.getPrefix("1:"));
assertNull(FilenameUtils.getPrefix("1:a"));
assertNull(FilenameUtils.getPrefix("\\\\\\a\\b\\c.txt"));
assertNull(FilenameUtils.getPrefix("\\\\a"));
Comment thread
MiriamCohenDev marked this conversation as resolved.

assertEquals("", FilenameUtils.getPrefix(""));
assertEquals("\\", FilenameUtils.getPrefix("\\"));
Expand All @@ -498,6 +496,7 @@ void testGetPrefix() {

assertEquals("C:\\", FilenameUtils.getPrefix("C:\\"));
assertEquals("//server/", FilenameUtils.getPrefix("//server/"));
assertEquals("//server", FilenameUtils.getPrefix("//server"));
assertEquals("~/", FilenameUtils.getPrefix("~"));
assertEquals("~/", FilenameUtils.getPrefix("~/"));
assertEquals("~user/", FilenameUtils.getPrefix("~user"));
Expand All @@ -507,6 +506,7 @@ void testGetPrefix() {
assertEquals("\\", FilenameUtils.getPrefix("\\a\\b\\c.txt"));
assertEquals("C:\\", FilenameUtils.getPrefix("C:\\a\\b\\c.txt"));
assertEquals("\\\\server\\", FilenameUtils.getPrefix("\\\\server\\a\\b\\c.txt"));
assertEquals("\\\\a", FilenameUtils.getPrefix("\\\\a"));

assertEquals("", FilenameUtils.getPrefix("a/b/c.txt"));
assertEquals("/", FilenameUtils.getPrefix("/a/b/c.txt"));
Expand Down Expand Up @@ -534,7 +534,6 @@ void testGetPrefixLength() {
assertEquals(-1, FilenameUtils.getPrefixLength("1:"));
assertEquals(-1, FilenameUtils.getPrefixLength("1:a"));
assertEquals(-1, FilenameUtils.getPrefixLength("\\\\\\a\\b\\c.txt"));
assertEquals(-1, FilenameUtils.getPrefixLength("\\\\a"));
Comment thread
MiriamCohenDev marked this conversation as resolved.

assertEquals(0, FilenameUtils.getPrefixLength(""));
assertEquals(1, FilenameUtils.getPrefixLength("\\"));
Expand All @@ -548,6 +547,7 @@ void testGetPrefixLength() {

assertEquals(3, FilenameUtils.getPrefixLength("C:\\"));
assertEquals(9, FilenameUtils.getPrefixLength("//server/"));
assertEquals(8, FilenameUtils.getPrefixLength("//server"));
assertEquals(2, FilenameUtils.getPrefixLength("~"));
assertEquals(2, FilenameUtils.getPrefixLength("~/"));
assertEquals(6, FilenameUtils.getPrefixLength("~user"));
Expand All @@ -558,6 +558,7 @@ void testGetPrefixLength() {
assertEquals(2, FilenameUtils.getPrefixLength("C:a\\b\\c.txt"));
assertEquals(3, FilenameUtils.getPrefixLength("C:\\a\\b\\c.txt"));
assertEquals(9, FilenameUtils.getPrefixLength("\\\\server\\a\\b\\c.txt"));
assertEquals(3, FilenameUtils.getPrefixLength( "\\\\a"));

assertEquals(0, FilenameUtils.getPrefixLength("a/b/c.txt"));
assertEquals(1, FilenameUtils.getPrefixLength("/a/b/c.txt"));
Expand Down Expand Up @@ -775,8 +776,8 @@ void testNormalize() {
assertNull(FilenameUtils.normalize("1:"));
assertNull(FilenameUtils.normalize("1:a"));
assertNull(FilenameUtils.normalize("\\\\\\a\\b\\c.txt"));
assertNull(FilenameUtils.normalize("\\\\a"));
Comment thread
MiriamCohenDev marked this conversation as resolved.

assertEquals( SEP + SEP + "a", 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(DRIVE_C + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("C:\\a\\b/c.txt"));
Expand Down Expand Up @@ -915,13 +916,14 @@ void testNormalize() {
assertNull(FilenameUtils.normalize("//server/../a"));
assertNull(FilenameUtils.normalize("//server/.."));
assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalize("//server/"));
assertEquals( SEP + SEP + "server", FilenameUtils.normalize("//server"));

assertEquals(SEP + SEP + "127.0.0.1" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\127.0.0.1\\a\\b\\c.txt"));
assertEquals(SEP + SEP + "::1" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\::1\\a\\b\\c.txt"));
assertEquals(SEP + SEP + "1::" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\1::\\a\\b\\c.txt"));
assertEquals(SEP + SEP + "server.example.org" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\server.example.org\\a\\b\\c.txt"));
assertEquals(SEP + SEP + "server.sub.example.org" + SEP + "a" + SEP + "b" + SEP + "c.txt",
FilenameUtils.normalize("\\\\server.sub.example.org\\a\\b\\c.txt"));
FilenameUtils.normalize("\\\\server.sub.example.org\\a\\b\\c.txt"));
Comment thread
MiriamCohenDev marked this conversation as resolved.
Outdated
assertEquals(SEP + SEP + "server." + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\server.\\a\\b\\c.txt"));
assertEquals(SEP + SEP + "1::127.0.0.1" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalize("\\\\1::127.0.0.1\\a\\b\\c.txt"));

Expand Down Expand Up @@ -986,8 +988,8 @@ void testNormalizeNoEndSeparator() {
assertNull(FilenameUtils.normalizeNoEndSeparator("1:"));
assertNull(FilenameUtils.normalizeNoEndSeparator("1:a"));
assertNull(FilenameUtils.normalizeNoEndSeparator("\\\\\\a\\b\\c.txt"));
assertNull(FilenameUtils.normalizeNoEndSeparator("\\\\a"));
Comment thread
MiriamCohenDev marked this conversation as resolved.

assertEquals( SEP + SEP + "a", FilenameUtils.normalizeNoEndSeparator("\\\\a"));
assertEquals("a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalizeNoEndSeparator("a\\b/c.txt"));
assertEquals("" + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalizeNoEndSeparator("\\a\\b/c.txt"));
assertEquals(DRIVE_C + SEP + "a" + SEP + "b" + SEP + "c.txt", FilenameUtils.normalizeNoEndSeparator("C:\\a\\b/c.txt"));
Expand Down Expand Up @@ -1127,6 +1129,7 @@ void testNormalizeNoEndSeparator() {
assertNull(FilenameUtils.normalizeNoEndSeparator("//server/../a"));
assertNull(FilenameUtils.normalizeNoEndSeparator("//server/.."));
assertEquals(SEP + SEP + "server" + SEP + "", FilenameUtils.normalizeNoEndSeparator("//server/"));
assertEquals( SEP + SEP + "server", FilenameUtils.normalizeNoEndSeparator("//server"));
}

@Test
Expand Down Expand Up @@ -1208,4 +1211,4 @@ void testSeparatorsToWindows() {
assertEquals("\\a\\b\\c", FilenameUtils.separatorsToWindows("/a/b/c"));
assertEquals("D:\\a\\b\\c", FilenameUtils.separatorsToWindows("D:/a/b/c"));
}
}
}
Comment thread
MiriamCohenDev marked this conversation as resolved.
Outdated