Skip to content

Commit

Permalink
Fix frame for more types of on-trace error messages.
Browse files Browse the repository at this point in the history
Thanks to Maxim Kokryashkin.

(cherry-picked from commit d5bbf9c)

This patch fixes the same issue with frame, as the previous
one, but now for the table overflow error in the `err_msgv`
function. The test for the problem uses the table of GC
finalizers, although they are not required to reproduce the
issue. They only used to make the test as simple as possible.

Resolves tarantool/tarantool#562
Part of tarantool/tarantool#8825
  • Loading branch information
Mike Pall authored and mkokryashkin committed Sep 8, 2023
1 parent a2c938c commit 20a9d97
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 0 deletions.
4 changes: 4 additions & 0 deletions src/lj_err.c
Expand Up @@ -875,6 +875,10 @@ LJ_NORET LJ_NOINLINE static void err_msgv(lua_State *L, ErrMsg em, ...)
const char *msg;
va_list argp;
va_start(argp, em);
if (LJ_HASJIT) {
TValue *base = tvref(G(L)->jit_base);
if (base) L->base = base;
}
if (curr_funcisL(L)) L->top = curr_topL(L);
msg = lj_strfmt_pushvf(L, err2msg(em), argp);
va_end(argp);
Expand Down
27 changes: 27 additions & 0 deletions test/tarantool-tests/lj-1034-tabov-error-frame.test.lua
@@ -0,0 +1,27 @@
local tap = require('tap')
local ffi = require('ffi')
local test = tap.test('lj-1034-tabov-error-frame'):skipcond({
['Test requires JIT enabled'] = not jit.status(),
['Test requires GC64 mode enabled'] = not ffi.abi('gc64'),
['Disabled on MacOS due to #8652'] = jit.os == 'OSX',
})

test:plan(2)

-- luacheck: no unused
local anchor = {}
local function on_gc(t) end

local function test_finalizers()
local i = 1
while true do
anchor[i] = ffi.gc(ffi.cast('void *', 0), on_gc)
i = i + 1
end
end

local st, err = pcall(test_finalizers)
st, err = pcall(test_finalizers)
test:ok(st == false, 'error handled successfully')
test:like(err, '^.+table overflow', 'error is table overflow')
test:done(true)

0 comments on commit 20a9d97

Please sign in to comment.