lua-users home
lua-l archive

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


Hi!

Am 25.06.2014 02:59 schröbte Pierre-Yves Gérardy:
I think I've found a bug in the C loader/seracher of Lua 5.1:

With the current version of require51 found at
https://gist.github.com/pygy/7d7d0209767a2d1c593a/f10fdaff5f391b0a6ccfde0a6d52408582176051,
if the sentinel is a table, it ends up being populated by the C loader
as if it were the module.

The sentinel is not a table but a lightuserdata, so maybe the bug is in the current version of `require51` ... E.g. both `luaL_register` and the `module` function assume that the sentinel is _not_ a table (the C searcher has nothing to do with it, neither does the C loader unless it calls `luaL_register` with a non-NULL library name). Even with a non-table sentinel, `require51` doesn't work correctly with a module that uses `module` or `luaL_register` and doesn't return a value.

Also, the searcher can be any callable object, but the loader has to be a function.


For eample, requiring lpeg twice triggers the cycle detection code. If
the sentinel has another type, the error does not occur.

However it is nowhere passed as a parameter to anything... I suppose
it is left on the stack and coopted by the loader.

—Pierre-Yves


Philipp