Skip to content

push到lua的UObject在UE端被gc,但userdata的flag没有标记UD_HADFREE,再次访问野指针崩溃。 #352

@ShuraLiu

Description

@ShuraLiu

大概从1个半月前,就一直被这个bug困扰,一直没有找到稳定复现的方式。崩溃堆栈的截图如下

std::__1::enable_if<(std::is_base_of<UObject, UClass>::value) && (!(std::is_same<UObject, UClass>::value)), UClass*>::type slua::LuaObject::testudata(slua::lua_State*, int, bool) + 1152
1 std::__1::enable_if<(std::is_base_of<UObject, UClass>::value) && (!(std::is_same<UObject, UClass>::value)), UClass*>::type slua::LuaObject::testudata(slua::lua_State*, int, bool) + 4136157135018918980
2 UClass* slua::LuaObject::checkUD(slua::lua_State*, int, bool) + 60
3 slua::checkUClassProperty(slua::lua_State*, UProperty*, unsigned char*, int) + 52
4 slua::fillParamFromState(slua::lua_State*, UProperty*, unsigned char*, int) + 104
5 slua::LuaObject::fillParam(slua::lua_State*, int, UFunction*, unsigned char*) + 252
6 slua::ufuncClosure(slua::lua_State*) + 256

症状就是抛到lua端的UObject在UE端已经被释放了,但UD_HADFREE没有被正确标记,导致testudata时直接调用isUObjectValid(ptr->ud)野指针,但为什么会没有正确标记UD_HADFREE我们这完全没有头绪,反复检查都没找出原因。求各路大佬看一看有没有什么思路。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions