Skip to content

Commit 9096b3d

Browse files
committed
fix(serverHandler/upload): ignore file whose path is alias-shadowed
1 parent c40dab5 commit 9096b3d

File tree

2 files changed

+25
-2
lines changed

2 files changed

+25
-2
lines changed

src/serverHandler/upload.go

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,16 @@ func (h *handler) saveUploadFiles(fsPrefix string, createDir, overwriteExists bo
9898
continue
9999
}
100100

101+
fsInfixPart1 := fsInfix
102+
fsInfixSlashIndex := strings.IndexByte(fsInfixPart1, '/')
103+
if fsInfixSlashIndex > 0 {
104+
fsInfixPart1 = fsInfixPart1[0:fsInfixSlashIndex]
105+
}
106+
if containsItem(aliasSubItems, fsInfixPart1) {
107+
errs = append(errs, errors.New("upload: ignore path shadowed by alias "+fsInfix))
108+
continue
109+
}
110+
101111
filePrefix += "/" + fsInfix
102112
err := os.MkdirAll(filePrefix, 0755)
103113
if err != nil {
@@ -114,7 +124,7 @@ func (h *handler) saveUploadFiles(fsPrefix string, createDir, overwriteExists bo
114124
continue
115125
}
116126

117-
isFilenameAliased := containsItem(aliasSubItems, filename)
127+
isFilenameAliased := len(fsInfix) == 0 && containsItem(aliasSubItems, filename)
118128
var fsFilename string
119129
if overwriteExists && !isFilenameAliased {
120130
tryPath := filePrefix + "/" + filename

test/case/011.alias.upload.bash

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,12 @@
22

33
cleanup() {
44
rm -f "$fs"/uploaded/2/*.tmp
5+
rm -fr "$fs"/vhost1/my*
56
}
67

78
source "$root"/lib.bash
89

9-
"$ghfs" -l 3003 -r "$fs"/vhost1 --alias :/my/upload:"$fs"/uploaded/2 --upload /my/upload &
10+
"$ghfs" -l 3003 -r "$fs"/vhost1 --alias :/my/upload:"$fs"/uploaded/2 --upload / --mkdir / &> /dev/null &
1011
sleep 0.05 # wait server ready
1112
cleanup
1213

@@ -20,5 +21,17 @@ curl_upload_content 'http://127.0.0.1:3003/my/upload?upload' file "$content" 'te
2021
uploaded=$(cat "$fs"/uploaded/2/uploaded2.tmp)
2122
assert "$uploaded" "$content"
2223

24+
curl_upload_content 'http://127.0.0.1:3003/?upload' file mycontent my
25+
[ -e "$fs"/vhost1/my ] && fail "$fs/vhost1/my should not exists"
26+
27+
curl_upload_content 'http://127.0.0.1:3003/?upload' file mycontent 'dir/to/my'
28+
[ -e "$fs"/vhost1/my ] && fail "$fs/vhost1/my should not exists"
29+
30+
curl_upload_content 'http://127.0.0.1:3003/?upload' dirfile mycontent 'my/myfile'
31+
[ -e "$fs"/vhost1/my ] && fail "$fs/vhost1/my should not exists"
32+
33+
curl_upload_content 'http://127.0.0.1:3003/?upload' dirfile mycontent 'my/mydir/file'
34+
[ -e "$fs"/vhost1/my ] && fail "$fs/vhost1/my should not exists"
35+
2336
cleanup
2437
jobs -p | xargs kill

0 commit comments

Comments
 (0)