lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


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