From cc229c51cc0114820ec32fa26d662506f21435d6 Mon Sep 17 00:00:00 2001 From: morkt Date: Tue, 15 Mar 2016 18:52:12 +0400 Subject: [PATCH] (IndexReader): use Path.Combine to concatenate file names. --- ArcFormats/DxLib/ArcDX.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/ArcFormats/DxLib/ArcDX.cs b/ArcFormats/DxLib/ArcDX.cs index a02d928e..63c281fb 100644 --- a/ArcFormats/DxLib/ArcDX.cs +++ b/ArcFormats/DxLib/ArcDX.cs @@ -298,7 +298,7 @@ namespace GameRes.Formats.DxLib if (dir.DirOffset != -1 && dir.ParentDirOffset != -1) { m_input.BaseStream.Position = m_header.FileTable + dir.DirOffset; - root = root + ExtractFileName (m_input.ReadUInt32()) + '\\'; + root = Path.Combine (root, ExtractFileName (m_input.ReadUInt32())); } long current_pos = m_header.FileTable + dir.FileTable; for (int i = 0; i < dir.FileCount; ++i) @@ -310,6 +310,8 @@ namespace GameRes.Formats.DxLib uint offset = m_input.ReadUInt32(); if (0 != (attr & 0x10)) // FILE_ATTRIBUTE_DIRECTORY { + if (0 == offset || table_offset == offset) + throw new InvalidFormatException ("Infinite recursion in DXA directory index"); ReadFileTable (root, offset); } else @@ -318,7 +320,7 @@ namespace GameRes.Formats.DxLib int packed_size = -1; if (m_version >= 2) packed_size = m_input.ReadInt32(); - var entry = FormatCatalog.Instance.Create (root+ExtractFileName (name_offset)); + var entry = FormatCatalog.Instance.Create (Path.Combine (root, ExtractFileName (name_offset))); entry.Offset = m_header.BaseOffset + offset; entry.UnpackedSize = size; entry.IsPacked = -1 != packed_size;