aboutsummaryrefslogtreecommitdiff
path: root/ldebug.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-03-05 12:10:34 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2021-03-05 12:10:34 -0300
commitf5df7f91f70234850484d26caf24e71e001e5304 (patch)
treefe0d12b5b8157b0ad34fc26dd65afa6ff8bb9c56 /ldebug.c
parente7803f7dbcdc966ab1f9db143424ee811ab1a398 (diff)
downloadlua-f5df7f91f70234850484d26caf24e71e001e5304.tar.gz
lua-f5df7f91f70234850484d26caf24e71e001e5304.tar.bz2
lua-f5df7f91f70234850484d26caf24e71e001e5304.zip
Wrong assertion in 'getbaseline'
The assertion cannot compute 'f->abslineinfo[i]' when the initial estimate 'i' is -1.
Diffstat (limited to 'ldebug.c')
-rw-r--r--ldebug.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ldebug.c b/ldebug.c
index 8e3657a9..1feaab22 100644
--- a/ldebug.c
+++ b/ldebug.c
@@ -50,6 +50,8 @@ static int currentpc (CallInfo *ci) {
50** an integer division gets the right place. When the source file has 50** an integer division gets the right place. When the source file has
51** large sequences of empty/comment lines, it may need extra entries, 51** large sequences of empty/comment lines, it may need extra entries,
52** so the original estimate needs a correction. 52** so the original estimate needs a correction.
53** If the original estimate is -1, the initial 'if' ensures that the
54** 'while' will run at least once.
53** The assertion that the estimate is a lower bound for the correct base 55** The assertion that the estimate is a lower bound for the correct base
54** is valid as long as the debug info has been generated with the same 56** is valid as long as the debug info has been generated with the same
55** value for MAXIWTHABS or smaller. (Previous releases use a little 57** value for MAXIWTHABS or smaller. (Previous releases use a little
@@ -63,7 +65,8 @@ static int getbaseline (const Proto *f, int pc, int *basepc) {
63 else { 65 else {
64 int i = cast_uint(pc) / MAXIWTHABS - 1; /* get an estimate */ 66 int i = cast_uint(pc) / MAXIWTHABS - 1; /* get an estimate */
65 /* estimate must be a lower bond of the correct base */ 67 /* estimate must be a lower bond of the correct base */
66 lua_assert(i < f->sizeabslineinfo && f->abslineinfo[i].pc <= pc); 68 lua_assert(i < 0 ||
69 (i < f->sizeabslineinfo && f->abslineinfo[i].pc <= pc));
67 while (i + 1 < f->sizeabslineinfo && pc >= f->abslineinfo[i + 1].pc) 70 while (i + 1 < f->sizeabslineinfo && pc >= f->abslineinfo[i + 1].pc)
68 i++; /* low estimate; adjust it */ 71 i++; /* low estimate; adjust it */
69 *basepc = f->abslineinfo[i].pc; 72 *basepc = f->abslineinfo[i].pc;