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修复 ### 🐞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> pathList = StrUtil.split(pathToUse, StrUtil.C_SLASH);
List<String> pathElements = new LinkedList<>(); List<String> pathElements = new LinkedList<>();
int tops = 0; int tops = 0;
String element; String element;
for (int i = pathList.size() - 1; i >= 0; i--) { for (int i = pathList.size() - 1; i >= 0; i--) {
element = pathList.get(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); 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("/bar/", FileUtil.normalize("/foo/../bar/")); Assert.assertEquals("/bar/", FileUtil.normalize("/foo/../bar/"));
Assert.assertEquals("/baz", FileUtil.normalize("/foo/../bar/../baz")); 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("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("bar", FileUtil.normalize("foo/../bar"));
Assert.assertEquals("/server/bar", FileUtil.normalize("//server/foo/../bar")); Assert.assertEquals("/server/bar", FileUtil.normalize("//server/foo/../bar"));
Assert.assertEquals("/bar", FileUtil.normalize("//server/../bar")); Assert.assertEquals("/bar", FileUtil.normalize("//server/../bar"));
Assert.assertEquals("C:/bar", FileUtil.normalize("C:\\foo\\..\\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:/bar", FileUtil.normalize("/C:/bar"));
Assert.assertEquals("C:", FileUtil.normalize("C:")); Assert.assertEquals("C:", FileUtil.normalize("C:"));
Assert.assertEquals("\\/192.168.1.1/Share/", FileUtil.normalize("\\\\192.168.1.1\\Share\\")); 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:")); 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 @Test
public void doubleNormalizeTest() { public void doubleNormalizeTest() {
String normalize = FileUtil.normalize("/aa/b:/c"); String normalize = FileUtil.normalize("/aa/b:/c");