Random hacks

This commit is contained in:
Richard Patel 2018-11-16 03:22:51 +01:00
parent 50952791c5
commit 3c39f0d621
No known key found for this signature in database
GPG Key ID: C268B2BBDA2ABECB

View File

@ -635,6 +635,8 @@ func resolvePath(base, ref string) string {
} }
if full == "" { if full == "" {
return "" return ""
} else if full == "/" {
return "/"
} }
dst := make([]rune, len(full)) dst := make([]rune, len(full))
@ -648,7 +650,34 @@ func resolvePath(base, ref string) string {
var stack []int var stack []int
stack = append(stack, 0) stack = append(stack, 0)
for i, c := range rs { for i, c := range rs {
if c == '/' { if i == len(rs) - 1 {
closingSlash := false
part := rs[start:]
if len(part) == 0 {
dst = append(dst, '/')
} else if part[len(part)-1] == '/' {
part = part[:len(part)-1]
closingSlash = true
}
switch {
case isRunesDot(part):
dst = append(dst, '/')
case isRunesDoubleDot(part):
// Cut to the last slash
start = i+1
dst = dst[:stack[len(stack)-1]]
if len(stack) != 1 {
stack = stack[:len(stack)-1]
}
dst = append(dst, '/')
default:
dst = append(dst, '/')
dst = append(dst, part...)
}
if closingSlash && len(dst) != 0 && dst[len(dst)-1] != '/' {
dst = append(dst, '/')
}
} else if c == '/' {
part := rs[start:i] part := rs[start:i]
switch { switch {
case isRunesDot(part): case isRunesDot(part):
@ -666,23 +695,6 @@ func resolvePath(base, ref string) string {
dst = append(dst, '/') dst = append(dst, '/')
dst = append(dst, part...) dst = append(dst, part...)
} }
} else if i == len(rs) - 1 {
part := rs[start:]
switch {
case isRunesDot(part):
dst = append(dst, '/')
case isRunesDoubleDot(part):
// Cut to the last slash
start = i+1
dst = dst[:stack[len(stack)-1]]
if len(stack) != 1 {
stack = stack[:len(stack)-1]
}
dst = append(dst, '/')
default:
dst = append(dst, '/')
dst = append(dst, part...)
}
} }
} }
return string(dst) return string(dst)