From 4217c2ccd68699fcdaad9dadc252becd1e672294 Mon Sep 17 00:00:00 2001 From: Edoardo Prezioso Date: Sat, 2 May 2015 13:46:34 +0200 Subject: [PATCH 1/3] - Fixed a very old bug in LookupLevelName code. If the map name neither matched 'ExMy', 'MAPxy' or 'LEVELxy', 'checkstring' was left uninitialized before using as argument to 'strstr', leading to undefined results. Spotted with Valgrind. --- src/g_mapinfo.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index 4d7b3c7d2..d26d2f45b 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -312,6 +312,10 @@ FString level_info_t::LookupLevelName() { mysnprintf (checkstring, countof(checkstring), "%d: ", atoi(&MapName[5])); } + else + { + checkstring[0] = '\0'; + } thename = strstr (lookedup, checkstring); if (thename == NULL) { From 353ace8be77d45b11708e054fb0edeb25c9ee4f0 Mon Sep 17 00:00:00 2001 From: Edoardo Prezioso Date: Sat, 2 May 2015 14:18:52 +0200 Subject: [PATCH 2/3] - Improve the code readability in LookupLevelName. --- src/g_mapinfo.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/g_mapinfo.cpp b/src/g_mapinfo.cpp index d26d2f45b..5a39d7dbb 100644 --- a/src/g_mapinfo.cpp +++ b/src/g_mapinfo.cpp @@ -314,10 +314,11 @@ FString level_info_t::LookupLevelName() } else { + // make sure nothing is stripped. checkstring[0] = '\0'; } thename = strstr (lookedup, checkstring); - if (thename == NULL) + if (thename == NULL || thename == lookedup) { thename = lookedup; } From 6639f871c6fcb0386c5791edcf73c1f927b1241b Mon Sep 17 00:00:00 2001 From: MajorCooke Date: Sun, 3 May 2015 17:55:01 -0500 Subject: [PATCH 3/3] - Fixed A_SetRipMin/Max not working properly. --- src/thingdef/thingdef_codeptr.cpp | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/thingdef/thingdef_codeptr.cpp b/src/thingdef/thingdef_codeptr.cpp index 23a6f58cf..6ac0f115b 100644 --- a/src/thingdef/thingdef_codeptr.cpp +++ b/src/thingdef/thingdef_codeptr.cpp @@ -5895,8 +5895,7 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_JumpIfHigherOrLower) // // A_SetRipperLevel(int level) // -// Sets the ripper level/requirement of the calling actor. -// Also sets the minimum and maximum levels to rip through. +// Sets the ripper level of the calling actor. //=========================================================================== DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetRipperLevel) { @@ -5909,26 +5908,24 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetRipperLevel) // // A_SetRipMin(int min) // -// Sets the ripper level/requirement of the calling actor. -// Also sets the minimum and maximum levels to rip through. +// Sets the minimum level a ripper must be in order to rip through this actor. //=========================================================================== DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetRipMin) { ACTION_PARAM_START(1); - ACTION_PARAM_INT(min, 1); + ACTION_PARAM_INT(min, 0); self->RipLevelMin = min; } //=========================================================================== // -// A_SetRipMin(int min) +// A_SetRipMax(int max) // -// Sets the ripper level/requirement of the calling actor. -// Also sets the minimum and maximum levels to rip through. +// Sets the minimum level a ripper must be in order to rip through this actor. //=========================================================================== DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_SetRipMax) { ACTION_PARAM_START(1); - ACTION_PARAM_INT(max, 1); + ACTION_PARAM_INT(max, 0); self->RipLevelMax = max; }