Skip to content

Commit 1eb13cf

Browse files
authored
fixes invalid Cursor dereference (#1100)
I found `tests/nimony/sysbasics/tdistincts.nim` causes invalid `PackedLineInfo` in `c.dest` in `src/nimony/sem.nim`. I added following code to check `it.n` before `addReturnResult c, resId, it.n.info` in `semBorrow` proc in `src/nimony/sem`. ```nim assert cursorToPosition(procBody, it.n) < procBody.len addReturnResult c, resId, it.n.info ``` That assert failed when compiled `tests/nimony/sysbasics/mdistincts.nim`: ```nim $ ./bin/nimony c -r tests/nimony/sysbasics/mdistincts.nim bin/nimsem --isMain m nimcache/mdi5tldn4.1.nif nimcache/mdi5tldn4.2.nif nimcache/mdi5tldn4.2.idx.nif src/nimony/nimsem.nim(126) nimsem src/nimony/nimsem.nim(123) handleCmdLine src/nimony/nimsem.nim(54) singleModule src/nimony/sem.nim(7341) semcheck src/nimony/sem.nim(7289) semcheckCore src/nimony/sem.nim(677) semStmt src/nimony/sem.nim(6823) semExpr src/nimony/sem.nim(4041) semProc src/nimony/sem.nim(3690) semBorrow nim-2.3.1/lib/std/assertions.nim(41) failedAssertImpl nim-2.3.1/lib/std/assertions.nim(34) raiseAssert Error: unhandled exception: src/nimony/sem.nim(3690, 3) `cursorToPosition(procBody, it.n) < procBody.len` [Assert ionDefect] ``` So `it.n` is dereferenced while `it.n` is referencing outside of `procBody`.
1 parent 595e06d commit 1eb13cf

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

src/nimony/sem.nim

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3686,7 +3686,7 @@ proc semBorrow(c: var SemContext; fn: StrId; beforeParams: int) =
36863686
var it = Item(n: n, typ: c.types.autoType)
36873687
let resId = declareResult(c, it.n.info)
36883688
semProcBody c, it
3689-
addReturnResult c, resId, it.n.info
3689+
addReturnResult c, resId, procBody[procBody.len - 1].info
36903690

36913691
proc getParamsType(c: var SemContext; paramsAt: int): seq[TypeCursor] =
36923692
result = @[]

0 commit comments

Comments
 (0)