소스 검색

Avoid crash if object has same name as on provided in compatiblity
identifiers field

Ivan Savenko 9 달 전
부모
커밋
b372cc84e9
1개의 변경된 파일12개의 추가작업 그리고 2개의 파일을 삭제
  1. 12 2
      lib/mapObjectConstructors/CObjectClassesHandler.cpp

+ 12 - 2
lib/mapObjectConstructors/CObjectClassesHandler.cpp

@@ -177,7 +177,12 @@ void CObjectClassesHandler::loadSubObject(const std::string & scope, const std::
 
 	registerObject(scope, baseObject->getJsonKey(), subObject->getSubTypeName(), subObject->subtype);
 	for(const auto & compatID : entry["compatibilityIdentifiers"].Vector())
-		registerObject(scope, baseObject->getJsonKey(), compatID.String(), subObject->subtype);
+	{
+		if (identifier != compatID.String())
+			registerObject(scope, baseObject->getJsonKey(), compatID.String(), subObject->subtype);
+		else
+			logMod->warn("Mod '%s' map object '%s': compatibility identifier has same name as object itself!");
+	}
 }
 
 void CObjectClassesHandler::loadSubObject(const std::string & scope, const std::string & identifier, const JsonNode & entry, ObjectClass * baseObject, size_t index)
@@ -192,7 +197,12 @@ void CObjectClassesHandler::loadSubObject(const std::string & scope, const std::
 
 	registerObject(scope, baseObject->getJsonKey(), subObject->getSubTypeName(), subObject->subtype);
 	for(const auto & compatID : entry["compatibilityIdentifiers"].Vector())
-		registerObject(scope, baseObject->getJsonKey(), compatID.String(), subObject->subtype);
+	{
+		if (identifier != compatID.String())
+			registerObject(scope, baseObject->getJsonKey(), compatID.String(), subObject->subtype);
+		else
+			logMod->warn("Mod '%s' map object '%s': compatibility identifier has same name as object itself!");
+	}
 }
 
 TObjectTypeHandler CObjectClassesHandler::loadSubObjectFromJson(const std::string & scope, const std::string & identifier, const JsonNode & entry, ObjectClass * baseObject, size_t index)