From: ANAND ツ Date: Tue, 21 May 2019 17:37:58 +0000 (+0530) Subject: Check for out-of-bounds breath when setting breath_max (#8493) X-Git-Tag: 5.1.0~214 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=a90f2efb12b5131436d22a3627403736e2d326b2;p=oweals%2Fminetest.git Check for out-of-bounds breath when setting breath_max (#8493) --- diff --git a/src/script/lua_api/l_object.cpp b/src/script/lua_api/l_object.cpp index b1f4e3da5..b7924ddb8 100644 --- a/src/script/lua_api/l_object.cpp +++ b/src/script/lua_api/l_object.cpp @@ -750,17 +750,26 @@ int ObjectRef::l_set_properties(lua_State *L) NO_MAP_LOCK_REQUIRED; ObjectRef *ref = checkobject(L, 1); ServerActiveObject *co = getobject(ref); - if (co == NULL) return 0; + if (!co) + return 0; + ObjectProperties *prop = co->accessObjectProperties(); if (!prop) return 0; + read_object_properties(L, 2, prop, getServer(L)->idef()); + if (prop->hp_max < co->getHP()) { PlayerHPChangeReason reason(PlayerHPChangeReason::SET_HP); co->setHP(prop->hp_max, reason); if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER) getServer(L)->SendPlayerHPOrDie((PlayerSAO *)co, reason); } + + if (co->getType() == ACTIVEOBJECT_TYPE_PLAYER && + prop->breath_max < co->getBreath()) + co->setBreath(prop->breath_max); + co->notifyObjectPropertiesModified(); return 0; }