Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
爱吃血肠
spring-framework
提交
7a02e438
S
spring-framework
项目概览
爱吃血肠
/
spring-framework
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
spring-framework
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7a02e438
编写于
6月 28, 2018
作者:
J
Juergen Hoeller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
StringUtils.cleanPath retains plain pointer to current directory
Issue: SPR-16908
上级
b6d95567
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
41 addition
and
31 deletion
+41
-31
spring-core/src/main/java/org/springframework/util/StringUtils.java
...e/src/main/java/org/springframework/util/StringUtils.java
+6
-2
spring-core/src/test/java/org/springframework/util/StringUtilsTests.java
.../test/java/org/springframework/util/StringUtilsTests.java
+35
-29
未找到文件。
spring-core/src/main/java/org/springframework/util/StringUtils.java
浏览文件 @
7a02e438
...
...
@@ -646,7 +646,7 @@ public abstract class StringUtils {
String
prefix
=
""
;
if
(
prefixIndex
!=
-
1
)
{
prefix
=
pathToUse
.
substring
(
0
,
prefixIndex
+
1
);
if
(
prefix
.
contains
(
"/"
))
{
if
(
prefix
.
contains
(
FOLDER_SEPARATOR
))
{
prefix
=
""
;
}
else
{
...
...
@@ -659,7 +659,7 @@ public abstract class StringUtils {
}
String
[]
pathArray
=
delimitedListToStringArray
(
pathToUse
,
FOLDER_SEPARATOR
);
List
<
String
>
pathElements
=
new
LinkedList
<>();
Li
nkedLi
st
<
String
>
pathElements
=
new
LinkedList
<>();
int
tops
=
0
;
for
(
int
i
=
pathArray
.
length
-
1
;
i
>=
0
;
i
--)
{
...
...
@@ -687,6 +687,10 @@ public abstract class StringUtils {
for
(
int
i
=
0
;
i
<
tops
;
i
++)
{
pathElements
.
add
(
0
,
TOP_PATH
);
}
// If nothing else left, at least explicitly point to current path.
if
(
pathElements
.
size
()
==
1
&&
""
.
equals
(
pathElements
.
getLast
())
&&
!
prefix
.
endsWith
(
FOLDER_SEPARATOR
))
{
pathElements
.
add
(
0
,
CURRENT_PATH
);
}
return
prefix
+
collectionToDelimitedString
(
pathElements
,
FOLDER_SEPARATOR
);
}
...
...
spring-core/src/test/java/org/springframework/util/StringUtilsTests.java
浏览文件 @
7a02e438
...
...
@@ -378,53 +378,59 @@ public class StringUtilsTests {
assertEquals
(
"../mypath/myfile"
,
StringUtils
.
cleanPath
(
"mypath/../../mypath/myfile"
));
assertEquals
(
"/../mypath/myfile"
,
StringUtils
.
cleanPath
(
"/../mypath/myfile"
));
assertEquals
(
"/mypath/myfile"
,
StringUtils
.
cleanPath
(
"/a/:b/../../mypath/myfile"
));
assertEquals
(
"file:///c:/path/to/the%20file.txt"
,
StringUtils
.
cleanPath
(
"file:///c:/some/../path/to/the%20file.txt"
));
assertEquals
(
"/"
,
StringUtils
.
cleanPath
(
"/"
));
assertEquals
(
"/"
,
StringUtils
.
cleanPath
(
"/mypath/../"
));
assertEquals
(
""
,
StringUtils
.
cleanPath
(
"mypath/.."
));
assertEquals
(
""
,
StringUtils
.
cleanPath
(
"mypath/../."
));
assertEquals
(
"./"
,
StringUtils
.
cleanPath
(
"mypath/../"
));
assertEquals
(
"./"
,
StringUtils
.
cleanPath
(
"././"
));
assertEquals
(
"./"
,
StringUtils
.
cleanPath
(
"./"
));
assertEquals
(
"../"
,
StringUtils
.
cleanPath
(
"../"
));
assertEquals
(
"../"
,
StringUtils
.
cleanPath
(
"./../"
));
assertEquals
(
"../"
,
StringUtils
.
cleanPath
(
".././"
));
assertEquals
(
"file:/"
,
StringUtils
.
cleanPath
(
"file:/"
));
assertEquals
(
"file:/"
,
StringUtils
.
cleanPath
(
"file:/mypath/../"
));
assertEquals
(
"file:"
,
StringUtils
.
cleanPath
(
"file:mypath/.."
));
assertEquals
(
"file:"
,
StringUtils
.
cleanPath
(
"file:mypath/../."
));
assertEquals
(
"file:./"
,
StringUtils
.
cleanPath
(
"file:mypath/../"
));
assertEquals
(
"file:./"
,
StringUtils
.
cleanPath
(
"file:././"
));
assertEquals
(
"file:./"
,
StringUtils
.
cleanPath
(
"file:./"
));
assertEquals
(
"file:../"
,
StringUtils
.
cleanPath
(
"file:../"
));
assertEquals
(
"file:../"
,
StringUtils
.
cleanPath
(
"file:./../"
));
assertEquals
(
"file:../"
,
StringUtils
.
cleanPath
(
"file:.././"
));
assertEquals
(
"file:///c:/path/the%20file.txt"
,
StringUtils
.
cleanPath
(
"file:///c:/some/../path/the%20file.txt"
));
}
@Test
public
void
testPathEquals
()
{
assertTrue
(
"Must be true for the same strings"
,
StringUtils
.
pathEquals
(
"/dummy1/dummy2/dummy3"
,
"/dummy1/dummy2/dummy3"
));
StringUtils
.
pathEquals
(
"/dummy1/dummy2/dummy3"
,
"/dummy1/dummy2/dummy3"
));
assertTrue
(
"Must be true for the same win strings"
,
StringUtils
.
pathEquals
(
"C:\\dummy1\\dummy2\\dummy3"
,
"C:\\dummy1\\dummy2\\dummy3"
));
StringUtils
.
pathEquals
(
"C:\\dummy1\\dummy2\\dummy3"
,
"C:\\dummy1\\dummy2\\dummy3"
));
assertTrue
(
"Must be true for one top path on 1"
,
StringUtils
.
pathEquals
(
"/dummy1/bin/../dummy2/dummy3"
,
"/dummy1/dummy2/dummy3"
));
StringUtils
.
pathEquals
(
"/dummy1/bin/../dummy2/dummy3"
,
"/dummy1/dummy2/dummy3"
));
assertTrue
(
"Must be true for one win top path on 2"
,
StringUtils
.
pathEquals
(
"C:\\dummy1\\dummy2\\dummy3"
,
"C:\\dummy1\\bin\\..\\dummy2\\dummy3"
));
StringUtils
.
pathEquals
(
"C:\\dummy1\\dummy2\\dummy3"
,
"C:\\dummy1\\bin\\..\\dummy2\\dummy3"
));
assertTrue
(
"Must be true for two top paths on 1"
,
StringUtils
.
pathEquals
(
"/dummy1/bin/../dummy2/bin/../dummy3"
,
"/dummy1/dummy2/dummy3"
));
StringUtils
.
pathEquals
(
"/dummy1/bin/../dummy2/bin/../dummy3"
,
"/dummy1/dummy2/dummy3"
));
assertTrue
(
"Must be true for two win top paths on 2"
,
StringUtils
.
pathEquals
(
"C:\\dummy1\\dummy2\\dummy3"
,
"C:\\dummy1\\bin\\..\\dummy2\\bin\\..\\dummy3"
));
StringUtils
.
pathEquals
(
"C:\\dummy1\\dummy2\\dummy3"
,
"C:\\dummy1\\bin\\..\\dummy2\\bin\\..\\dummy3"
));
assertTrue
(
"Must be true for double top paths on 1"
,
StringUtils
.
pathEquals
(
"/dummy1/bin/tmp/../../dummy2/dummy3"
,
"/dummy1/dummy2/dummy3"
));
StringUtils
.
pathEquals
(
"/dummy1/bin/tmp/../../dummy2/dummy3"
,
"/dummy1/dummy2/dummy3"
));
assertTrue
(
"Must be true for double top paths on 2 with similarity"
,
StringUtils
.
pathEquals
(
"/dummy1/dummy2/dummy3"
,
"/dummy1/dum/dum/../../dummy2/dummy3"
));
StringUtils
.
pathEquals
(
"/dummy1/dummy2/dummy3"
,
"/dummy1/dum/dum/../../dummy2/dummy3"
));
assertTrue
(
"Must be true for current paths"
,
StringUtils
.
pathEquals
(
"./dummy1/dummy2/dummy3"
,
"dummy1/dum/./dum/../../dummy2/dummy3"
));
StringUtils
.
pathEquals
(
"./dummy1/dummy2/dummy3"
,
"dummy1/dum/./dum/../../dummy2/dummy3"
));
assertFalse
(
"Must be false for relative/absolute paths"
,
StringUtils
.
pathEquals
(
"./dummy1/dummy2/dummy3"
,
"/dummy1/dum/./dum/../../dummy2/dummy3"
));
StringUtils
.
pathEquals
(
"./dummy1/dummy2/dummy3"
,
"/dummy1/dum/./dum/../../dummy2/dummy3"
));
assertFalse
(
"Must be false for different strings"
,
StringUtils
.
pathEquals
(
"/dummy1/dummy2/dummy3"
,
"/dummy1/dummy4/dummy3"
));
StringUtils
.
pathEquals
(
"/dummy1/dummy2/dummy3"
,
"/dummy1/dummy4/dummy3"
));
assertFalse
(
"Must be false for one false path on 1"
,
StringUtils
.
pathEquals
(
"/dummy1/bin/tmp/../dummy2/dummy3"
,
"/dummy1/dummy2/dummy3"
));
StringUtils
.
pathEquals
(
"/dummy1/bin/tmp/../dummy2/dummy3"
,
"/dummy1/dummy2/dummy3"
));
assertFalse
(
"Must be false for one false win top path on 2"
,
StringUtils
.
pathEquals
(
"C:\\dummy1\\dummy2\\dummy3"
,
"C:\\dummy1\\bin\\tmp\\..\\dummy2\\dummy3"
));
StringUtils
.
pathEquals
(
"C:\\dummy1\\dummy2\\dummy3"
,
"C:\\dummy1\\bin\\tmp\\..\\dummy2\\dummy3"
));
assertFalse
(
"Must be false for top path on 1 + difference"
,
StringUtils
.
pathEquals
(
"/dummy1/bin/../dummy2/dummy3"
,
"/dummy1/dummy2/dummy4"
));
StringUtils
.
pathEquals
(
"/dummy1/bin/../dummy2/dummy3"
,
"/dummy1/dummy2/dummy4"
));
}
@Test
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录