From 6b8bd2bbb78bdc92a9ed264c9328b779600848aa Mon Sep 17 00:00:00 2001 From: Roger Shi Date: Tue, 8 Sep 2015 23:32:53 +0800 Subject: [PATCH 1/4] Fix issue #2245 --- compiler/aliases.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/compiler/aliases.nim b/compiler/aliases.nim index 3d3fc9a793..4b592ee607 100644 --- a/compiler/aliases.nim +++ b/compiler/aliases.nim @@ -146,7 +146,7 @@ proc isPartOf*(a, b: PNode): TAnalysisResult = # go down recursively; this is quite demanding: const Ix0Kinds = {nkDotExpr, nkBracketExpr, nkObjUpConv, nkObjDownConv, - nkCheckedFieldExpr} + nkCheckedFieldExpr, nkHiddenAddr} Ix1Kinds = {nkHiddenStdConv, nkHiddenSubConv, nkConv} DerefKinds = {nkHiddenDeref, nkDerefExpr} case b.kind From 8f9ce5285fe7923da2ebecda61f83dc056013e19 Mon Sep 17 00:00:00 2001 From: Roger Shi Date: Wed, 9 Sep 2015 11:40:13 +0800 Subject: [PATCH 2/4] fix #2367 --- lib/pure/json.nim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/pure/json.nim b/lib/pure/json.nim index 540a1a8eb7..d98ed1042c 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`. From 58e1068f739a2115fe83db9bd6af34501eff1af4 Mon Sep 17 00:00:00 2001 From: Roger Shi Date: Wed, 9 Sep 2015 21:32:29 +0800 Subject: [PATCH 3/4] test case for #2245 --- tests/alias/talias.nim | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/alias/talias.nim b/tests/alias/talias.nim index 6addc4704f..810ea20959 100644 --- a/tests/alias/talias.nim +++ b/tests/alias/talias.nim @@ -30,7 +30,7 @@ type c: char se: seq[TA] -proc p(param1, param2: TC): TC = +proc p(param1, param2: TC, param3: var TC): TC = var local: TC plocal: ptr TC @@ -43,6 +43,7 @@ proc p(param1, param2: TC): TC = plocal2[] ?<| local param1 ?<| param2 + local ?<| param3 local.arr[0] !<| param1 local.arr !<| param1 @@ -62,5 +63,5 @@ var a <| a a !<| b -discard p(x, x) +discard p(x, x, x) From 16fe63180f7192af5218df83878c89a6a5c554cd Mon Sep 17 00:00:00 2001 From: Roger Shi Date: Thu, 10 Sep 2015 15:16:01 +0800 Subject: [PATCH 4/4] test case for #2367 --- lib/pure/json.nim | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/pure/json.nim b/lib/pure/json.nim index d98ed1042c..abf6305f2c 100644 --- a/lib/pure/json.nim +++ b/lib/pure/json.nim @@ -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)