From 3d1fa538c2cb8f7dcbbdb7ad0f0e3c3bc39b73b9 Mon Sep 17 00:00:00 2001 From: Chris Galvan Date: Fri, 21 May 2021 12:05:24 -0500 Subject: [PATCH] [LYN-2255] Added extra protection for duplicate replacement of alias logic by bookending the strings. --- .../AzToolsFramework/Prefab/PrefabPublicHandler.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp index 05d1f54c75..4b55dca178 100644 --- a/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp +++ b/Code/Framework/AzToolsFramework/AzToolsFramework/Prefab/PrefabPublicHandler.cpp @@ -109,7 +109,6 @@ namespace AzToolsFramework for (auto& nestedInstance : instances) { AZStd::unique_ptr outInstance = commonRootEntityOwningInstance->get().DetachNestedInstance(nestedInstance->GetInstanceAlias()); - instancePtrs.emplace_back(AZStd::move(outInstance)); auto linkRef = m_prefabSystemComponentInterface->FindLink(nestedInstance->GetLinkId()); @@ -122,6 +121,8 @@ namespace AzToolsFramework } RemoveLink(outInstance, commonRootEntityOwningInstance->get().GetTemplateId(), undoBatch.GetUndoBatch()); + + instancePtrs.emplace_back(AZStd::move(outInstance)); } PrefabUndoHelpers::UpdatePrefabInstance( @@ -823,9 +824,14 @@ namespace AzToolsFramework QString newEntityDomString = aliasEntityPair.second; // Replace all of the old alias references with the new ones + // We bookend the aliases with \" as an extra precaution to prevent + // inadvertently replacing a matching string vs. where an actual EntityId is expected for (auto aliasMapIter : oldAliasToNewAliasMap) { - newEntityDomString.replace(aliasMapIter.first.c_str(), aliasMapIter.second.c_str()); + QString oldAlias = QString("\"%1\"").arg(aliasMapIter.first.c_str()); + QString newAlias = QString("\"%1\"").arg(aliasMapIter.second.c_str()); + + newEntityDomString.replace(oldAlias, newAlias); } // Create the new Entity DOM from parsing the JSON string