Skip to content

UnLua数学库没有类型验证 #550

@Italink

Description

@Italink

UnLua提供数学库里的函数参数都没有进行类型验证:
image

最近我们这边在代码中发现一个错误,有同事在构造FTransform的时候,本应该是FQuat的参数,他传入了一个FRotator,UnLua这里只是强制转换了一下类型而并没有出现报错,导致这个问题存在了一个多月,直到最近另一个同事使用源码Debug版的引擎,才发现的。

感觉可以在Editor上加一些验证,不然的话这种问题真的很难查证T.T

template<typename _Ty>
_Ty* GetCppInstanceFastWithCheck(lua_State* L, int32 Index) {
    bool bTwoLvlPtr = false;
    void* Userdata = GetUserdataFast(L, Index, &bTwoLvlPtr);
    if (Userdata){
        if(bTwoLvlPtr)
            Userdata = *((void**)Userdata) ;
#ifdef  WITH_EDITOR
        if (lua_getmetatable(L, Index)) {
            const char* Typename = UnLua::TType<_Ty>::GetName();
            luaL_getmetatable(L, Typename);
            if (!lua_rawequal(L, -1, -2)) {
                const char* ErrorString = nullptr;
                luaL_traceback(L, L, ErrorString, 1);
                ErrorString = lua_tostring(L, -1);
                UE_LOG(LogUnLua, Error, TEXT("Must Use Type: %s \n %s"), UTF8_TO_TCHAR(Typename), UTF8_TO_TCHAR(ErrorString));
            }
            lua_pop(L, 2);
        }
#endif //  WITH_EDITOR
        return (_Ty*)Userdata;         // return instance's address
    }
    return nullptr;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions