cocos2d / cocos2d-x

Cocos2d-x is a suite of open-source, cross-platform, game-development tools utilized by millions of developers across the globe. Its core has evolved to serve as the foundation for Cocos Creator 1.x & 2.x.
https://www.cocos.com/en/cocos2d-x
18.22k stars 7.05k forks source link

关于lua 引用 C++ 指针的安全问题 #15408

Open xzben opened 8 years ago

xzben commented 8 years ago

example:

if COCOS2D_DEBUG >= 1

if (!tolua_isusertype(tolua_S,1,"cc.Ref",0,&tolua_err)) goto tolua_lerror;

endif

cobj = (cocos2d::Ref*)tolua_tousertype(tolua_S,1,0);

if COCOS2D_DEBUG >= 1

if (!cobj) 
{
    tolua_error(tolua_S,"invalid 'cobj' in function 'lua_cocos2dx_Ref_release'", nullptr);
    return 0;
}

endif

在 debug 的情况下,我们 lua 引用c++ 的时候会做一些安全的检测,这种情况下,运行程序不会crash,且正确的抛出的错误信息,但是到了release 却少了这个关键的安全检测,导致 拿到的 cobj 可能为 nullptr然后就下就是crash了。 在实际开发过程中,由于我们的log信息太多,在测试的时候很有可能忽略这些报错的log信息,导致我们一打包到手机时就可能会crash,而且在那个时候对于手机crash信息也不方便,如果能够让 在 debug 的时候打印错误且直接crash的时候能够方便在测试阶段及时发现问题,release 的时候也加上这些安全性的检测保证发行包的稳定性将会更加的棒。

以上是我在开发过程中的一下感受,望采纳。祝 cocos2d-x 越来越好。。。。

minggo commented 8 years ago

But it will cause performance issue.

minggo commented 8 years ago

We can remove it if it is acceptable.