freebsd-ports/games/burrtools/files/patch-undefined
Jan Beich c2aa416155 games/burrtools: switch back to clang on 10+
Fix undefined behavior on startup when parsing (embedded) config file
written in Lua.

MFH:		2016Q2
2016-05-30 12:00:30 +00:00

54 lines
2.6 KiB
Text

Found by -fsanitize=undefined as
$ burrGui
lua/luaclass.cpp:60:17: runtime error: execution reached the end of a value-returning function without returning a value
which with Clang leads to
* thread #1: tid = 100272, 0x00000000005d0d2d burrGui`luaClass_c::doString(this=0x00007fffffffd6e0, code="windowposh = 600") + 125 at luaclass.cpp:61, stop reason = signal SIGILL: privileged instruction
frame #0: 0x00000000005d0d2d burrGui`luaClass_c::doString(this=0x00007fffffffd6e0, code="windowposh = 600") + 125 at luaclass.cpp:61
58 luaL_loadfile(L, fname) || lua_pcall(L, 0, 0, 0);
59 }
60 int luaClass_c::doString(const char *code) {
-> 61 luaL_loadbuffer(L, code, strlen(code), "line") || lua_pcall(L, 0, 0, 0);
62 }
63
64 /* functions that allow calling lua functions
(lldb) bt
* thread #1: tid = 100272, 0x00000000005d0d2d burrGui`luaClass_c::doString(this=0x00007fffffffd6e0, code="windowposh = 600") + 125 at luaclass.cpp:61, stop reason = signal SIGILL: privileged instruction
* frame #0: 0x00000000005d0d2d burrGui`luaClass_c::doString(this=0x00007fffffffd6e0, code="windowposh = 600") + 125 at luaclass.cpp:61
frame #1: 0x0000000000416735 burrGui`configuration_c::parse(this=0x00000000008e5a18) + 165 at configuration.cpp:65
frame #2: 0x0000000000416fbb burrGui`configuration_c::configuration_c(this=0x00000000008e5a18) + 939 at configuration.cpp:144
frame #3: 0x0000000000417877 burrGui`::__cxx_global_var_init() + 23 at configuration.cpp:266
frame #4: 0x00000000004178b9 burrGui`_GLOBAL__sub_I_configuration.cpp + 9 at configuration.cpp:0
frame #5: 0x00000000006221e2 burrGui`__do_global_ctors_aux + 34
frame #6: 0x000000000040e986 burrGui
--- src/lua/luaclass.cpp.orig 2013-05-08 19:02:06 UTC
+++ src/lua/luaclass.cpp
@@ -54,10 +54,10 @@ bool luaClass_c::getBool(const char *nam
}
/* functions to evaluate lua code */
-int luaClass_c::doFile(const char *fname) {
+void luaClass_c::doFile(const char *fname) {
luaL_loadfile(L, fname) || lua_pcall(L, 0, 0, 0);
}
-int luaClass_c::doString(const char *code) {
+void luaClass_c::doString(const char *code) {
luaL_loadbuffer(L, code, strlen(code), "line") || lua_pcall(L, 0, 0, 0);
}
--- src/lua/luaclass.h.orig 2013-05-08 19:02:06 UTC
+++ src/lua/luaclass.h
@@ -45,8 +45,8 @@ class luaClass_c {
bool getBool(const char *name);
/* functions to evaluate lua code */
- int doFile(const char *fname);
- int doString(const char *code);
+ void doFile(const char *fname);
+ void doString(const char *code);
/* functions that allow calling lua functions
*