diff --git a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs index 1e21b743bf..47a47cc107 100644 --- a/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/Avatar/Inventory/Archiver/InventoryArchiveReadRequest.cs @@ -502,10 +502,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver { //IRegionSerialiser serialiser = scene.RequestModuleInterface(); // Right now we're nastily obtaining the UUID from the filename - string filename = assetPath.Remove(0, ArchiveConstants.ASSETS_PATH.Length); - int i = filename.LastIndexOf(ArchiveConstants.ASSET_EXTENSION_SEPARATOR); + string filename = assetPath[ArchiveConstants.ASSETS_PATH.Length..]; + int indx = filename.LastIndexOf(ArchiveConstants.ASSET_EXTENSION_SEPARATOR); - if (i == -1) + if (indx < 32) { m_log.ErrorFormat( "[INVENTORY ARCHIVER]: Could not find extension information in asset path {0} since it's missing the separator {1}. Skipping", @@ -514,11 +514,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver return false; } - string extension = filename.Substring(i); - string rawUuid = filename.Remove(filename.Length - extension.Length); - UUID assetId = new UUID(rawUuid); - - if (!ArchiveConstants.EXTENSION_TO_ASSET_TYPE.ContainsKey(extension)) + string extension = filename[indx..]; + if (!ArchiveConstants.EXTENSION_TO_ASSET_TYPE.TryGetValue(extension, out sbyte assetType)) { m_log.ErrorFormat( "[INVENTORY ARCHIVER]: Tried to dearchive data with path {0} with an unknown type extension {1}", @@ -526,7 +523,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Inventory.Archiver return false; } - sbyte assetType = ArchiveConstants.EXTENSION_TO_ASSET_TYPE[extension]; + string rawUuid = filename.Remove(indx); + if (!UUID.TryParse(rawUuid, out UUID assetId)) + return false; + if (assetType == (sbyte)AssetType.Unknown) { m_log.WarnFormat("[INVENTORY ARCHIVER]: Importing {0} byte asset {1} with unknown type", data.Length, assetId); diff --git a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs index c3948f9a3a..42a0f37853 100644 --- a/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs +++ b/OpenSim/Region/CoreModules/World/Archiver/ArchiveReadRequest.cs @@ -306,7 +306,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver string filename = assetPath[ArchiveConstants.ASSETS_PATH.Length..]; int indx = filename.LastIndexOf(ArchiveConstants.ASSET_EXTENSION_SEPARATOR); - if (indx < 0) + if (indx < 32) { m_log.ErrorFormat( "[ARCHIVER]: Could not find extension information in asset path {0} since it's missing the separator {1}. Skipping", @@ -315,7 +315,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver continue; } string extension = filename[indx..]; - if (ArchiveConstants.EXTENSION_TO_ASSET_TYPE.ContainsKey(extension)) + if (ArchiveConstants.EXTENSION_TO_ASSET_TYPE.TryGetValue(extension, out sbyte ext)) { string id = filename.Remove(indx); if (UUID.TryParse(id, out UUID uuid)) @@ -323,7 +323,7 @@ namespace OpenSim.Region.CoreModules.World.Archiver ids.Add(id); uuids.Add(uuid); datas.Add(data); - types.Add(ArchiveConstants.EXTENSION_TO_ASSET_TYPE[extension]); + types.Add(ext); continue; } }