diff options
author | koranza <15344611+koranza@users.noreply.github.com> | 2018-05-18 18:25:49 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-18 18:25:49 -0500 |
commit | aefa6547c3a616a31e311b333c385a5e8761a68a (patch) | |
tree | 2fa56f5a69c4ffd810c5566bcb9fbed4b3e05b1c /lib/pure | |
parent | 39988eb1cfae043271376bd21fa301ba2115b59c (diff) | |
download | Nim-aefa6547c3a616a31e311b333c385a5e8761a68a.tar.gz |
check string lengths to avoid index out of bound
Diffstat (limited to 'lib/pure')
-rw-r--r-- | lib/pure/os.nim | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/lib/pure/os.nim b/lib/pure/os.nim index 03445a035..9a1fb39d5 100644 --- a/lib/pure/os.nim +++ b/lib/pure/os.nim @@ -139,6 +139,7 @@ proc findExe*(exe: string, followSymlinks: bool = true; ## is added the `ExeExts <#ExeExts>`_ file extensions if it has none. ## If the system supports symlinks it also resolves them until it ## meets the actual file. This behavior can be disabled if desired. + if exe.len == 0: return template checkCurrentDir() = for ext in extensions: result = addFileExt(exe, ext) @@ -149,8 +150,9 @@ proc findExe*(exe: string, followSymlinks: bool = true; checkCurrentDir() let path = string(getEnv("PATH")) for candidate in split(path, PathSep): + if candidate.len == 0: continue when defined(windows): - var x = (if candidate[0] == '"' and candidate[^1] == '"': + var x = (if candidate.len > 2 and candidate[0] == '"' and candidate[^1] == '"': substr(candidate, 1, candidate.len-2) else: candidate) / exe else: @@ -1649,4 +1651,4 @@ proc setLastModificationTime*(file: string, t: times.Time) = var ft = t.toWinTime.toFILETIME let res = setFileTime(h, nil, nil, ft.addr) discard h.closeHandle - if res == 0'i32: raiseOSError(osLastError()) \ No newline at end of file + if res == 0'i32: raiseOSError(osLastError()) |