summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorkoranza <15344611+koranza@users.noreply.github.com>2018-05-18 18:25:49 -0500
committerGitHub <noreply@github.com>2018-05-18 18:25:49 -0500
commitaefa6547c3a616a31e311b333c385a5e8761a68a (patch)
tree2fa56f5a69c4ffd810c5566bcb9fbed4b3e05b1c /lib/pure
parent39988eb1cfae043271376bd21fa301ba2115b59c (diff)
downloadNim-aefa6547c3a616a31e311b333c385a5e8761a68a.tar.gz
check string lengths to avoid index out of bound
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/os.nim6
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())