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

@ -3,11 +3,12 @@
-------------------------------------------------------------------------------------------------------------
# 5.7.5 (2021-07-10)
# 5.7.5 (2021-07-12)
### 🐣新特性
### 🐞Bug修复
* 【core 】 修复FileUtil.normalize处理上级路径的问题issue#I3YPEH@Gitee
-------------------------------------------------------------------------------------------------------------

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");