ソースを参照

Fixed possible use-after-free crash with artifacts registration in RMG.

AlexVinS 9 年 前
コミット
42e7128acc
2 ファイル変更8 行追加1 行削除
  1. 8 0
      lib/mapping/CMap.cpp
  2. 0 1
      lib/rmg/CRmgTemplateZone.cpp

+ 8 - 0
lib/mapping/CMap.cpp

@@ -591,6 +591,14 @@ void CMap::addNewObject(CGObjectInstance * obj)
 			quests.push_back(q->quest);
 		}
 		break;
+	case Obj::SPELL_SCROLL:
+		{
+			CGArtifact * art = dynamic_cast<CGArtifact *>(obj);
+
+			if(art->storedArtifact && art->storedArtifact->id.getNum() < 0)
+				addNewArtifactInstance(art->storedArtifact);
+		}
+		break;
 	default:
 		break;
 	}

+ 0 - 1
lib/rmg/CRmgTemplateZone.cpp

@@ -2522,7 +2522,6 @@ void CRmgTemplateZone::addAllPossibleObjects(CMapGenerator* gen)
 				}
 			}
 			auto a = CArtifactInstance::createScroll(RandomGeneratorUtil::nextItem(out, gen->rand)->toSpell());
-			gen->map->addNewArtifactInstance(a);
 			obj->storedArtifact = a;
 			return obj;
 		};