summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--lib/pure/json.nim2
-rw-r--r--tests/stdlib/t15835.nim17
2 files changed, 19 insertions, 0 deletions
diff --git a/lib/pure/json.nim b/lib/pure/json.nim
index f3145301f..a3f7a782e 100644
--- a/lib/pure/json.nim
+++ b/lib/pure/json.nim
@@ -1052,6 +1052,8 @@ when defined(nimFixedForwardGeneric):
     dst = jsonNode.bval
 
   proc initFromJson(dst: var JsonNode; jsonNode: JsonNode; jsonPath: var string) =
+    if jsonNode == nil:
+      raise newException(KeyError, "key not found: " & jsonPath)
     dst = jsonNode.copy
 
   proc initFromJson[T: SomeInteger](dst: var T; jsonNode: JsonNode, jsonPath: var string) =
diff --git a/tests/stdlib/t15835.nim b/tests/stdlib/t15835.nim
new file mode 100644
index 000000000..bddfa87aa
--- /dev/null
+++ b/tests/stdlib/t15835.nim
@@ -0,0 +1,17 @@
+import json
+
+type
+  Foo = object
+    ii*: int
+    data*: JsonNode
+
+block:
+  const jt = """{"ii": 123, "data": ["some", "data"]}"""
+  let js = parseJson(jt)
+  discard js.to(Foo)
+
+block:
+  const jt = """{"ii": 123}"""
+  let js = parseJson(jt)
+  doAssertRaises(KeyError):
+    echo js.to(Foo)