os.nim: use the new pathnorm.normalizePath implementation
This commit is contained in:
parent
5b39c7aca9
commit
ce9815bcf5
4 changed files with 67 additions and 85 deletions
|
|
@ -984,36 +984,37 @@ proc normalizePath*(path: var string) {.rtl, extern: "nos$1", tags: [], noNimScr
|
|||
##
|
||||
## Warning: URL-encoded and Unicode attempts at directory traversal are not detected.
|
||||
## Triple dot is not handled.
|
||||
let isAbs = isAbsolute(path)
|
||||
var stack: seq[string] = @[]
|
||||
for p in split(path, {DirSep}):
|
||||
case p
|
||||
of "", ".":
|
||||
continue
|
||||
of "..":
|
||||
if stack.len == 0:
|
||||
if isAbs:
|
||||
discard # collapse all double dots on absoluta paths
|
||||
else:
|
||||
path = pathnorm.normalizePath(path)
|
||||
when false:
|
||||
let isAbs = isAbsolute(path)
|
||||
var stack: seq[string] = @[]
|
||||
for p in split(path, {DirSep}):
|
||||
case p
|
||||
of "", ".":
|
||||
continue
|
||||
of "..":
|
||||
if stack.len == 0:
|
||||
if isAbs:
|
||||
discard # collapse all double dots on absoluta paths
|
||||
else:
|
||||
stack.add(p)
|
||||
elif stack[^1] == "..":
|
||||
stack.add(p)
|
||||
elif stack[^1] == "..":
|
||||
stack.add(p)
|
||||
else:
|
||||
discard stack.pop()
|
||||
else:
|
||||
discard stack.pop()
|
||||
else:
|
||||
stack.add(p)
|
||||
stack.add(p)
|
||||
|
||||
if isAbs:
|
||||
path = DirSep & join(stack, $DirSep)
|
||||
elif stack.len > 0:
|
||||
path = join(stack, $DirSep)
|
||||
else:
|
||||
path = "."
|
||||
if isAbs:
|
||||
path = DirSep & join(stack, $DirSep)
|
||||
elif stack.len > 0:
|
||||
path = join(stack, $DirSep)
|
||||
else:
|
||||
path = "."
|
||||
|
||||
proc normalizedPath*(path: string): string {.rtl, extern: "nos$1", tags: [], noNimScript.} =
|
||||
## Returns a normalized path for the current OS. See `<#normalizePath>`_
|
||||
result = path
|
||||
normalizePath(result)
|
||||
result = pathnorm.normalizePath(path)
|
||||
|
||||
when defined(Windows) and not defined(nimscript):
|
||||
proc openHandle(path: string, followSymlink=true, writeAccess=false): Handle =
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue