-
Notifications
You must be signed in to change notification settings - Fork 288
Open
Description
Hi,
unilua中stack 增长的代码,看过之后觉得有一个bug,那就是:程序不能够分配LuaConf.LUAI_MAXSTACK的栈大小空间。源代码如下:
Do.cs:
private void D_GrowStack(int n)
{
int size = Stack.Length;
if(size > LuaConf.LUAI_MAXSTACK)
D_Throw(ThreadStatus.LUA_ERRERR);
int needed = Top.Index + n + LuaDef.EXTRA_STACK;
int newsize = 2 * size;
if(newsize > LuaConf.LUAI_MAXSTACK)
{ newsize = LuaConf.LUAI_MAXSTACK; }
if(newsize < needed)
{ newsize = needed; }
if(newsize > LuaConf.LUAI_MAXSTACK)
{
D_ReallocStack(ERRORSTACKSIZE);
G_RunError("stack overflow");
}
else
{
D_ReallocStack(newsize);
}
}
private void D_ReallocStack(int size)
{
Utl.Assert(size < LuaConf.LUAI_MAXSTACK || size == ERRORSTACKSIZE);
var newStack = new StkId[size];
int i = 0;
for( ; i<Stack.Length; ++i) {
newStack[i] = Stack[i];
newStack[i].SetList(newStack);
}
for( ; i<size; ++i) {
newStack[i] = new StkId();
newStack[i].SetList(newStack);
newStack[i].SetIndex(i);
newStack[i].V.SetNilValue();
}
Top = newStack[Top.Index];
Stack = newStack;
StackLast = size - LuaDef.EXTRA_STACK;
}
这个代码里边,方法D_GrowStack是允许栈分配LUAI_MAXSTACK大小的,但是方法D_ReallocStack却不允许,因为这里
Utl.Assert(size < LuaConf.LUAI_MAXSTACK || size == ERRORSTACKSIZE);
只允许栈小于LUAI_MAXSTACK。
但是当我把这里的小于直接改为小于等于之后,程序一直转菊花,没反应。
所以想确认下,上述代码是否是一个bug,还是我用的unilua版本不对,我用的最新版。
如果这里确实是个bug,能否给一个解决方案。
期待回复!谢谢!
Metadata
Metadata
Assignees
Labels
No labels