Skip to content

UliLua stack增长代码的bug #53

@honemle

Description

@honemle

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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions