Fix crash regression when invsize formspec gets used
authorest31 <MTest31@outlook.com>
Fri, 16 Oct 2015 23:01:12 +0000 (01:01 +0200)
committerest31 <MTest31@outlook.com>
Fri, 16 Oct 2015 23:29:05 +0000 (01:29 +0200)
The invsize formspec element is outdated. Even though,
it is still supported, only a deprecation warning is shown,
introduced by commit [1]. The lua context passed to the
log_deprecated method added by commit [1] is NULL for the
invsize deprecation warning, as its run on the client and not
the server.

Commit [1] has removed checks for NULL inside the log_deprecated
method, resulting in a crash when a formspec with an invsize
element is parsed. This commit puts the check back.

Fixes #3260.

Referenced commits:

[1]: b5acec0a3c5701c53854ff7afdf4008863e6e8df "Add proper lua api deprecated handling"

[2]: 7b8d372947aae232ddf598155e972bb4dda157a "Use warningstream for deprecated field messages and refactor log_deprecated"

src/script/common/c_internal.cpp

index 073ff15415728db06453853f189834399ec2fcb7..b349f9dd1f7d928ebc537872380e884c4248857d 100644 (file)
@@ -179,10 +179,14 @@ void log_deprecated(lua_State *L, const std::string &message)
 
        if (do_log) {
                warningstream << message << std::endl;
-               if (do_error)
-                       script_error(L, LUA_ERRRUN, NULL, NULL);
-               else
-                       infostream << script_get_backtrace(L) << std::endl;
+               // L can be NULL if we get called by log_deprecated(const std::string &msg)
+               // from scripting_game.cpp.
+               if (L) {
+                       if (do_error)
+                               script_error(L, LUA_ERRRUN, NULL, NULL);
+                       else
+                               infostream << script_get_backtrace(L) << std::endl;
+               }
        }
 }