Skip to content

Commit b1d52d8

Browse files
committed
Wrap local archive file retrieval in try/catch
1 parent 5937bd0 commit b1d52d8

1 file changed

Lines changed: 29 additions & 21 deletions

File tree

TACTSharp/CDN.cs

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -309,37 +309,45 @@ public unsafe bool TryGetLocalFile(string eKey, out ReadOnlySpan<byte> data)
309309
var archivePath = Path.Combine(Settings.BaseDir, "Data", "data", "data." + archiveIndex.ToString().PadLeft(3, '0'));
310310
var archiveLength = new FileInfo(archivePath).Length;
311311

312-
using (var archive = MemoryMappedFile.CreateFromFile(archivePath, FileMode.Open, null, 0, MemoryMappedFileAccess.Read))
313-
using (var accessor = archive.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read))
314-
using (var mmapViewHandle = accessor.SafeMemoryMappedViewHandle)
312+
try
315313
{
316-
byte* ptr = null;
317-
try
314+
using (var archive = MemoryMappedFile.CreateFromFile(archivePath, FileMode.Open, null, 0, MemoryMappedFileAccess.Read))
315+
using (var accessor = archive.CreateViewAccessor(0, 0, MemoryMappedFileAccess.Read))
316+
using (var mmapViewHandle = accessor.SafeMemoryMappedViewHandle)
318317
{
319-
mmapViewHandle.AcquirePointer(ref ptr);
318+
byte* ptr = null;
319+
try
320+
{
321+
mmapViewHandle.AcquirePointer(ref ptr);
322+
323+
if (archiveOffset + archiveSize > archiveLength)
324+
{
325+
Console.WriteLine("Skipping local file read: " + archiveOffset + " + " + archiveSize + " > " + archiveLength + " for archive " + "data." + archiveIndex.ToString().PadLeft(3, '0'));
326+
data = null;
327+
return false;
328+
}
320329

321-
if (archiveOffset + archiveSize > archiveLength)
330+
data = new ReadOnlySpan<byte>(ptr + archiveOffset, archiveSize).ToArray();
331+
return true;
332+
}
333+
catch (Exception e)
322334
{
323-
Console.WriteLine("Skipping local file read: " + archiveOffset + " + " + archiveSize + " > " + archiveLength + " for archive " + "data." + archiveIndex.ToString().PadLeft(3, '0'));
335+
Console.WriteLine("Failed to read local file: " + e.Message);
324336
data = null;
325337
return false;
326338
}
327-
328-
data = new ReadOnlySpan<byte>(ptr + archiveOffset, archiveSize).ToArray();
329-
return true;
330-
}
331-
catch (Exception e)
332-
{
333-
Console.WriteLine("Failed to read local file: " + e.Message);
334-
data = null;
335-
return false;
336-
}
337-
finally
338-
{
339-
mmapViewHandle.ReleasePointer();
339+
finally
340+
{
341+
mmapViewHandle.ReleasePointer();
342+
}
340343
}
341344
}
345+
catch (Exception e)
346+
{
347+
Console.WriteLine("Failed to read local file (make sure it is not in use): " + e.Message);
348+
}
342349
}
350+
343351
data = null;
344352
return false;
345353
}

0 commit comments

Comments
 (0)