lua-users home
lua-l archive

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


Hello Jan,

On Mon, Nov 10, 2014 at 9:39 AM, Jan Behrens
<jbe-lua-l@public-software-group.org> wrote:
> On Mon, 10 Nov 2014 11:18:57 -0200
> Roberto Ierusalimschy <roberto@inf.puc-rio.br> wrote:
>
>> > > Looking into the source code of Lua 5.2.3, I found that in line
>> > > #93 of lmem.c, the function luaD_throw(L, LUA_ERRMEM) is called
>> > > #without
>> > > pushing first an error message on top of the stack. Other calls of
>> > > luaD_throw, however, push an error message to the stack, e.g.
>> > > function lexerror() in llex.c, line #110 or function checkmode()
>> > > in ldo.c, line #635.
>> > >
>> > > Is this a bug?
>> >
>> > There seems to be a bug, but not there. As lhf pointed out, memory
>> > errors are handled differently; the error message for them is
>> > pushed in ldo.c, function 'seterrorobj'.
>>
>> The bug is that 'seterrorobj' is not called in the case of a panic.
>> (For protected calls, the error message "not enough memory" is
>> returned correctly.)
>>
>> -- Roberto
>>
>
> Thank you for this information. I might just push an error string on
> top of the stack as a workaround before calling lua_newuserdata() until
> this bug has been fixed.

An even better solution would be to use lua_pushcfunction + lua_pcall
so you don't get a panic at all. A panic should not be considered a
routine error handling mechanism, IMO.

-- 
Patrick Donnelly