[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Incorrect handling of LUA_ERRERR in xpcall
- From: Quae Quack <quae@...>
- Date: Thu, 7 Oct 2010 14:00:41 +1100
The stock lua implementation's xpcall doesn't handle an error in the
error handler how you'd think: it keeps calling itself until it blows
the stack.
The expected behaviour would be to propogate the error up to the next
protected call (IMO)
luajit doesn't recursivly call xpcall, but the xpcall instead just
returns "error in error handling".
lhf has said the bug still happens in 5.2
Daurnimator.
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> function f() error("hi") end; function e(...) print(...) error("err") end
> print(xpcall(f,e))
stdin:1: hi
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
C stack overflow
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
stdin:1: err
false error in error handling