fix normalize

This commit is contained in:
Looly
2021-07-12 10:08:17 +08:00
parent a8cc693b18
commit bee3056844
3 changed files with 23 additions and 6 deletions

View File

@@ -1456,9 +1456,9 @@ public class FileUtil extends PathUtil {
}
List<String> pathList = StrUtil.split(pathToUse, StrUtil.C_SLASH);
List<String> pathElements = new LinkedList<>();
int tops = 0;
String element;
for (int i = pathList.size() - 1; i >= 0; i--) {
element = pathList.get(i);
@@ -1478,6 +1478,15 @@ public class FileUtil extends PathUtil {
}
}
// issue#1703@Github
if(tops > 0){
while (tops-- > 0){
//遍历完节点发现还有上级标注(即开头有一个或多个..),补充之
// Normal path element found.
pathElements.add(0, StrUtil.DOUBLE_DOT);
}
}
return prefix + CollUtil.join(pathElements, StrUtil.SLASH);
}

View File

@@ -147,15 +147,16 @@ public class FileUtilTest {
Assert.assertEquals("/bar", FileUtil.normalize("/foo/../bar"));
Assert.assertEquals("/bar/", FileUtil.normalize("/foo/../bar/"));
Assert.assertEquals("/baz", FileUtil.normalize("/foo/../bar/../baz"));
Assert.assertEquals("/", FileUtil.normalize("/../"));
Assert.assertEquals("/../", FileUtil.normalize("/../"));
Assert.assertEquals("foo", FileUtil.normalize("foo/bar/.."));
Assert.assertEquals("bar", FileUtil.normalize("foo/../../bar"));
Assert.assertEquals("../bar", FileUtil.normalize("foo/../../bar"));
Assert.assertEquals("bar", FileUtil.normalize("foo/../bar"));
Assert.assertEquals("/server/bar", FileUtil.normalize("//server/foo/../bar"));
Assert.assertEquals("/bar", FileUtil.normalize("//server/../bar"));
Assert.assertEquals("C:/bar", FileUtil.normalize("C:\\foo\\..\\bar"));
Assert.assertEquals("C:/bar", FileUtil.normalize("C:\\..\\bar"));
Assert.assertEquals("bar", FileUtil.normalize("../../bar"));
//
Assert.assertEquals("C:/../bar", FileUtil.normalize("C:\\..\\bar"));
Assert.assertEquals("../../bar", FileUtil.normalize("../../bar"));
Assert.assertEquals("C:/bar", FileUtil.normalize("/C:/bar"));
Assert.assertEquals("C:", FileUtil.normalize("C:"));
Assert.assertEquals("\\/192.168.1.1/Share/", FileUtil.normalize("\\\\192.168.1.1\\Share\\"));
@@ -184,6 +185,12 @@ public class FileUtilTest {
Assert.assertEquals("", FileUtil.normalize("classpath:"));
}
@Test
public void normalizeClassPathTest2() {
Assert.assertEquals("../a/b.csv", FileUtil.normalize("../a/b.csv"));
Assert.assertEquals("../../../a/b.csv", FileUtil.normalize("../../../a/b.csv"));
}
@Test
public void doubleNormalizeTest() {
String normalize = FileUtil.normalize("/aa/b:/c");