diff options
author | Mike Pall <mike> | 2023-11-07 22:25:42 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2023-11-07 22:25:42 +0100 |
commit | 433d7e8d8d182f44e88b5cfdc4b2d3026469dfb7 (patch) | |
tree | 0db6991a51d2fca4257cf6b662c79d5fe50db0c6 | |
parent | d133d67c881f363f0b5584ebd21a965eb3435aa1 (diff) | |
download | luajit-433d7e8d8d182f44e88b5cfdc4b2d3026469dfb7.tar.gz luajit-433d7e8d8d182f44e88b5cfdc4b2d3026469dfb7.tar.bz2 luajit-433d7e8d8d182f44e88b5cfdc4b2d3026469dfb7.zip |
FFI: Fix pragma push stack limit check and throw on overflow.
Reported by Sergey Kaplun. #1114
-rw-r--r-- | src/lj_cparse.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/src/lj_cparse.c b/src/lj_cparse.c index f807c5ae..2ef7dbe1 100644 --- a/src/lj_cparse.c +++ b/src/lj_cparse.c | |||
@@ -1747,9 +1747,11 @@ static void cp_pragma(CPState *cp, BCLine pragmaline) | |||
1747 | cp_check(cp, '('); | 1747 | cp_check(cp, '('); |
1748 | if (cp->tok == CTOK_IDENT) { | 1748 | if (cp->tok == CTOK_IDENT) { |
1749 | if (cp->str->hash == H_(738e923c,a1b65954)) { /* push */ | 1749 | if (cp->str->hash == H_(738e923c,a1b65954)) { /* push */ |
1750 | if (cp->curpack < CPARSE_MAX_PACKSTACK) { | 1750 | if (cp->curpack < CPARSE_MAX_PACKSTACK-1) { |
1751 | cp->packstack[cp->curpack+1] = cp->packstack[cp->curpack]; | 1751 | cp->packstack[cp->curpack+1] = cp->packstack[cp->curpack]; |
1752 | cp->curpack++; | 1752 | cp->curpack++; |
1753 | } else { | ||
1754 | cp_errmsg(cp, cp->tok, LJ_ERR_XLEVELS); | ||
1753 | } | 1755 | } |
1754 | } else if (cp->str->hash == H_(6c71cf27,6c71cf27)) { /* pop */ | 1756 | } else if (cp->str->hash == H_(6c71cf27,6c71cf27)) { /* pop */ |
1755 | if (cp->curpack > 0) cp->curpack--; | 1757 | if (cp->curpack > 0) cp->curpack--; |