summary refs log tree commit diff stats
path: root/lib/pure/json.nim
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2015-09-16 11:36:49 +0200
committerAraq <rumpf_a@web.de>2015-09-16 11:36:49 +0200
commitc9a2fa54c7055c16892e9664dd64d8fc68918c07 (patch)
treeb67fca3d93765f677de696f4f8b1ed50b031b164 /lib/pure/json.nim
parent1251fc76c32bdd50a3b9540e0cd80b0c435051ce (diff)
parentd24eaf084b4be17e43f262d4127a91993ae6f7cd (diff)
downloadNim-c9a2fa54c7055c16892e9664dd64d8fc68918c07.tar.gz
Merge branch 'devel' into fix_bracket_expr
Diffstat (limited to 'lib/pure/json.nim')
-rw-r--r--lib/pure/json.nim13
1 files changed, 12 insertions, 1 deletions
diff --git a/lib/pure/json.nim b/lib/pure/json.nim
index 540a1a8eb..abf6305f2 100644
--- a/lib/pure/json.nim
+++ b/lib/pure/json.nim
@@ -1074,9 +1074,9 @@ when not defined(js):
     ## for nice error messages.
     var p: JsonParser
     p.open(s, filename)
+    defer: p.close()
     discard getTok(p) # read first token
     result = p.parseJson()
-    p.close()
 
   proc parseJson*(buffer: string): JsonNode =
     ## Parses JSON from `buffer`.
@@ -1203,6 +1203,17 @@ when isMainModule:
   testJson{["c", "d"]} = %true
   assert(testJson["c"]["d"].bval)
 
+  # make sure no memory leek when parsing invalid string
+  let startMemory = getOccupiedMem()
+  for i in 0 .. 10000:
+    try:
+      discard parseJson"""{ invalid"""
+    except:
+      discard
+  # memory diff should less than 2M
+  assert(abs(getOccupiedMem() - startMemory) < 2 * 1024 * 1024)
+
+
   # test `$`
   let stringified = $testJson
   let parsedAgain = parseJson(stringified)