summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/pure/includes/osenv.nim5
-rw-r--r--tests/stdlib/tos.nim6
2 files changed, 8 insertions, 3 deletions
diff --git a/lib/pure/includes/osenv.nim b/lib/pure/includes/osenv.nim
index 92ba3829f..d0c92d566 100644
--- a/lib/pure/includes/osenv.nim
+++ b/lib/pure/includes/osenv.nim
@@ -5,9 +5,10 @@ when not declared(os) and not declared(ospaths):
 
 when defined(nodejs):
   proc getEnv*(key: string, default = ""): string {.tags: [ReadEnvEffect].} =
-    var ret: cstring
+    var ret = default.cstring
     let key2 = key.cstring
-    {.emit: "`ret` = process.env[`key2`];".}
+    {.emit: "const value = process.env[`key2`];".}
+    {.emit: "if (value !== undefined) { `ret` = value };".}
     result = $ret
 
   proc existsEnv*(key: string): bool {.tags: [ReadEnvEffect].} =
diff --git a/tests/stdlib/tos.nim b/tests/stdlib/tos.nim
index b47412a62..cf6fa20fa 100644
--- a/tests/stdlib/tos.nim
+++ b/tests/stdlib/tos.nim
@@ -520,7 +520,7 @@ block ospaths:
   # but not `./foo/bar` and `foo/bar`
   doAssert joinPath(".", "/lib") == unixToNativePath"./lib"
   doAssert joinPath(".","abc") == unixToNativePath"./abc"
-  
+
   # cases related to issue #13455
   doAssert joinPath("foo", "", "") == "foo"
   doAssert joinPath("foo", "") == "foo"
@@ -566,6 +566,10 @@ block osenv:
     doAssert existsEnv(dummyEnvVar) == false
     delEnv(dummyEnvVar)         # deleting an already deleted env var
     doAssert existsEnv(dummyEnvVar) == false
+  block:
+    doAssert getEnv("DUMMY_ENV_VAR_NONEXISTENT", "") == ""
+    doAssert getEnv("DUMMY_ENV_VAR_NONEXISTENT", " ") == " "
+    doAssert getEnv("DUMMY_ENV_VAR_NONEXISTENT", "Arrakis") == "Arrakis"
 
 block isRelativeTo:
   doAssert isRelativeTo("/foo", "/")