lua-users home
lua-l archive

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


> Hi, list!
> 
> For me it seems that there is a quirk in luaL_unref.
> 
> There is a check at the beginning of luaL_unref:
> if (ref >= 0)
> 
> But value 0 is used to store reference to the head of the freelist (there
> is a #define freelist 0 above)
> 
> So passing 0 to luaL_unref will cause some trouble.
> It should not be a problem with correct usage of the API (luaL_ref never
> returns 0), but anyway this condition seems incorrect to me (should be
> "greater", not "greater and equal").

As you said, 0 is not a valid parameter to luaL_unref. The test
separates positive indices, which must be removed from the table, from
negative indices (LUA_REFNIL and LUA_NOREF), which must be ignored.
Whatever we do with zero, it will be wrong.  Changing the test to
(ref > 0) would only change what kind of wrong thing Lua would do with
an invalid input.

-- Roberto