lua-users home
lua-l archive

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


When seriali[sz]ing a function (e.g. as a subroutine when seriali[sz]ing a 
table), it seems that you need to use string.dump() at one end and 
loadstring() at the other.

But lexical scoping confuses the issue -- the refman says that the 
argument to string.dump 'must be a Lua function with no upvalues,' but 
doesn't enforce this restriction when it is called. This means that you 
can inadvertently dump() a function with upvalues, which will almost 
certainly provoke a run-time error when you 'undump' it later in another 
context.

Is there any way to determine that a function is suitable for 
seriali[sz]ation with string.dump() other than by using debug.getupvalue()  
to check if it has upvalues?

(I ask because it seems that the debug library is something that a 
security-conscious Lua script might want to disable at run-time in 
production use. Of course, a security-conscious script might not want to 
allow (de)seriali[sz]ation of functions, but that is another matter :-)