3

MINGW32 を使用して Lua 5.2 をコンパイルすると、Lua エラーが発生したときにホスト アプリケーションをクラッシュさせる可能性があるライブラリ (lua52.dll) が作成されます。

テスト スクリプトで Lua 構文エラーを作成することで、このバグを検出しました。スクリプトにエラーがまったくない場合、ホスト プログラムはスクリプトを正常に実行しました。ただし、無効なスクリプト (IF ブロックに THEN がない場合など) をロードすると、ホスト プログラムがクラッシュしました。

ここに私のコードの断片があります:

//Load the script    
int status = luaL_loadfile(L, "foo.lua");
if (status == 0) {
    //Run the script
    ....
} else {
    warn("LUA script error: %d. %s", status, lua_tostring(L, -1));       
    lua_pop(L, 1);
}    

スクリプトに構文エラーがない場合statusは 0 であり、スクリプトは正常に実行されています。それ以外の場合、luaL_loadfile返されず、プログラムがクラッシュします。

4

1 に答える 1

3

問題はCFLAGSLua の Makefile に指定されています。もともと、src/Makefile次の行が含まれています。

CFLAGS= -O2 -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)

この問題は、次のように変更することで修正されます。

CFLAGS= -O2 -fno-omit-frame-pointer -Wall -DLUA_COMPAT_ALL $(SYSCFLAGS) $(MYCFLAGS)

説明

setjmpLua のエラー処理は、関数およびの使用に基づいていますlongjmp-O2最適化フラグは、暗黙的にコンパイラにフレーム ポインタを省略させます。これを避けるために、-fno-omit-frame-pointerこの設定をオーバーライドするために渡します。

お役に立てれば。

于 2013-11-11T10:13:50.200 に答える