Skip to content

Commit

Permalink
fix: callback handle error with non-strings
Browse files Browse the repository at this point in the history
  • Loading branch information
zhaozg committed Aug 20, 2023
1 parent bc01ad8 commit abcb476
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 2 deletions.
6 changes: 4 additions & 2 deletions src/luv.c
Original file line number Diff line number Diff line change
Expand Up @@ -706,7 +706,8 @@ LUALIB_API int luv_cfpcall(lua_State* L, int nargs, int nresult, int flags) {
break;
case LUA_ERRMEM:
if ((flags & LUVF_CALLBACK_NOERRMSG) == 0)
fprintf(stderr, "System Error: %s\n", lua_tostring(L, -1));
fprintf(stderr, "System Error: %s\n",
luaL_tolstring(L, lua_absindex(L, -1), NULL));
if ((flags & LUVF_CALLBACK_NOEXIT) == 0)
exit(-1);
lua_pop(L, 1);
Expand All @@ -716,7 +717,8 @@ LUALIB_API int luv_cfpcall(lua_State* L, int nargs, int nresult, int flags) {
case LUA_ERRERR:
default:
if ((flags & LUVF_CALLBACK_NOERRMSG) == 0)
fprintf(stderr, "Uncaught Error: %s\n", lua_tostring(L, -1));
fprintf(stderr, "Uncaught Error: %s\n",
luaL_tolstring(L, lua_absindex(L, -1), NULL));
if ((flags & LUVF_CALLBACK_NOEXIT) == 0)
exit(-1);
lua_pop(L, 1);
Expand Down
24 changes: 24 additions & 0 deletions tests/manual-test-cb-non-string-error.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
return require('lib/tap')(function (test)
test("timer callback with errors", function(print, p, expect, uv)
local Error = {}
Error.__index = Error

function Error.new(msg)
local o = setmetatable({}, Error)
o.msg = assert(msg)
return o
end

function Error:__tostring()
return assert(tostring(self.msg))
end

local timer = uv.new_timer()
timer:start(10, 0, function()
timer:stop()
timer:close()
local e = Error.new('Error in timeout callback')
error(e)
end)
end)
end)

0 comments on commit abcb476

Please sign in to comment.