mirror of
https://github.com/SabreTools/BinaryObjectScanner.git
synced 2026-09-22 14:54:56 +00:00
Fail slower on resource parsing (fixes #81)
This commit is contained in:
@@ -33,6 +33,7 @@ namespace BurnOutSharp.ExecutableType.Microsoft.Entries
|
||||
if (Data == null || codePage < 0)
|
||||
return string.Empty;
|
||||
|
||||
// Try to convert to UTF-8 first
|
||||
try
|
||||
{
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
@@ -40,11 +41,17 @@ namespace BurnOutSharp.ExecutableType.Microsoft.Entries
|
||||
byte[] convertedData = Encoding.Convert(originalEncoding, Encoding.UTF8, Data);
|
||||
return Encoding.UTF8.GetString(convertedData);
|
||||
}
|
||||
catch (Exception ex)
|
||||
catch { }
|
||||
|
||||
// Then try to read direct as ASCII
|
||||
try
|
||||
{
|
||||
return Encoding.ASCII.GetString(Data);
|
||||
}
|
||||
|
||||
catch { }
|
||||
|
||||
// If both encodings fail, then just return an empty string
|
||||
return string.Empty;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -395,43 +395,47 @@ namespace BurnOutSharp.Tools
|
||||
if (rdt == null)
|
||||
return null;
|
||||
|
||||
foreach (var rdte in rdt.NamedEntries)
|
||||
try
|
||||
{
|
||||
if (rdte.IsResourceDataEntry() && rdte.DataEntry != null)
|
||||
foreach (var rdte in rdt.NamedEntries)
|
||||
{
|
||||
if (dataStart != null && rdte.DataEntry.DataAsUTF8String.StartsWith(dataStart))
|
||||
return rdte.DataEntry;
|
||||
else if (dataContains != null && rdte.DataEntry.DataAsUTF8String.Contains(dataContains))
|
||||
return rdte.DataEntry;
|
||||
else if (dataEnd != null && rdte.DataEntry.DataAsUTF8String.EndsWith(dataStart))
|
||||
return rdte.DataEntry;
|
||||
if (rdte.IsResourceDataEntry() && rdte.DataEntry != null)
|
||||
{
|
||||
if (dataStart != null && rdte.DataEntry.DataAsUTF8String.StartsWith(dataStart))
|
||||
return rdte.DataEntry;
|
||||
else if (dataContains != null && rdte.DataEntry.DataAsUTF8String.Contains(dataContains))
|
||||
return rdte.DataEntry;
|
||||
else if (dataEnd != null && rdte.DataEntry.DataAsUTF8String.EndsWith(dataStart))
|
||||
return rdte.DataEntry;
|
||||
}
|
||||
else
|
||||
{
|
||||
var manifest = FindResourceInTable(rdte.Subdirectory, dataStart, dataContains, dataEnd);
|
||||
if (manifest != null)
|
||||
return manifest;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
var manifest = FindResourceInTable(rdte.Subdirectory, dataStart, dataContains, dataEnd);
|
||||
if (manifest != null)
|
||||
return manifest;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var rdte in rdt.IdEntries)
|
||||
{
|
||||
if (rdte.IsResourceDataEntry() && rdte.DataEntry != null)
|
||||
foreach (var rdte in rdt.IdEntries)
|
||||
{
|
||||
if (dataStart != null && rdte.DataEntry.DataAsUTF8String.StartsWith(dataStart))
|
||||
return rdte.DataEntry;
|
||||
else if (dataContains != null && rdte.DataEntry.DataAsUTF8String.Contains(dataContains))
|
||||
return rdte.DataEntry;
|
||||
else if (dataEnd != null && rdte.DataEntry.DataAsUTF8String.EndsWith(dataStart))
|
||||
return rdte.DataEntry;
|
||||
}
|
||||
else
|
||||
{
|
||||
var manifest = FindResourceInTable(rdte.Subdirectory, dataStart, dataContains, dataEnd);
|
||||
if (manifest != null)
|
||||
return manifest;
|
||||
if (rdte.IsResourceDataEntry() && rdte.DataEntry != null)
|
||||
{
|
||||
if (dataStart != null && rdte.DataEntry.DataAsUTF8String.StartsWith(dataStart))
|
||||
return rdte.DataEntry;
|
||||
else if (dataContains != null && rdte.DataEntry.DataAsUTF8String.Contains(dataContains))
|
||||
return rdte.DataEntry;
|
||||
else if (dataEnd != null && rdte.DataEntry.DataAsUTF8String.EndsWith(dataStart))
|
||||
return rdte.DataEntry;
|
||||
}
|
||||
else
|
||||
{
|
||||
var manifest = FindResourceInTable(rdte.Subdirectory, dataStart, dataContains, dataEnd);
|
||||
if (manifest != null)
|
||||
return manifest;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user