mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
[ArchiveTools] Add more null checks
This commit is contained in:
@@ -223,6 +223,13 @@ namespace SabreTools.Helper.Tools
|
|||||||
string realEntry = "";
|
string realEntry = "";
|
||||||
Stream ms = ExtractStream(input, entryName, out realEntry, logger);
|
Stream ms = ExtractStream(input, entryName, out realEntry, logger);
|
||||||
|
|
||||||
|
// If we got out a null or empty entry, then we don't have a stream
|
||||||
|
if (String.IsNullOrEmpty(realEntry))
|
||||||
|
{
|
||||||
|
ms.Dispose();
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
realEntry = Path.Combine(Path.GetFullPath(tempDir), realEntry);
|
realEntry = Path.Combine(Path.GetFullPath(tempDir), realEntry);
|
||||||
if (!Directory.Exists(Path.GetDirectoryName(realEntry)))
|
if (!Directory.Exists(Path.GetDirectoryName(realEntry)))
|
||||||
{
|
{
|
||||||
@@ -421,10 +428,35 @@ namespace SabreTools.Helper.Tools
|
|||||||
long size = 0;
|
long size = 0;
|
||||||
string crc = "";
|
string crc = "";
|
||||||
|
|
||||||
// If we have a gzip file, get the crc directly
|
switch (at)
|
||||||
if (at == ArchiveType.GZip)
|
|
||||||
{
|
{
|
||||||
// Get the CRC and size from the file
|
case ArchiveType.SevenZip:
|
||||||
|
SevenZipArchive sza = SevenZipArchive.Open(input, new ReaderOptions { LeaveStreamOpen = false });
|
||||||
|
foreach (SevenZipArchiveEntry entry in sza.Entries)
|
||||||
|
{
|
||||||
|
if (entry != null && !entry.IsDirectory)
|
||||||
|
{
|
||||||
|
logger.Verbose("Entry found: '" + entry.Key + "': "
|
||||||
|
+ (size == 0 ? entry.Size : size) + ", "
|
||||||
|
+ (crc == "" ? entry.Crc.ToString("X").ToLowerInvariant() : crc));
|
||||||
|
|
||||||
|
roms.Add(new Rom
|
||||||
|
{
|
||||||
|
Type = ItemType.Rom,
|
||||||
|
Name = entry.Key,
|
||||||
|
Size = (size == 0 ? entry.Size : size),
|
||||||
|
CRC = (crc == "" ? entry.Crc.ToString("X").ToLowerInvariant() : crc),
|
||||||
|
|
||||||
|
Machine = new Machine
|
||||||
|
{
|
||||||
|
Name = gamename,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ArchiveType.GZip:// Get the CRC and size from the file
|
||||||
BinaryReader br = new BinaryReader(File.OpenRead(input));
|
BinaryReader br = new BinaryReader(File.OpenRead(input));
|
||||||
br.BaseStream.Seek(-8, SeekOrigin.End);
|
br.BaseStream.Seek(-8, SeekOrigin.End);
|
||||||
byte[] headercrc = br.ReadBytes(4);
|
byte[] headercrc = br.ReadBytes(4);
|
||||||
@@ -432,9 +464,61 @@ namespace SabreTools.Helper.Tools
|
|||||||
byte[] headersize = br.ReadBytes(4);
|
byte[] headersize = br.ReadBytes(4);
|
||||||
size = BitConverter.ToInt32(headersize.Reverse().ToArray(), 0);
|
size = BitConverter.ToInt32(headersize.Reverse().ToArray(), 0);
|
||||||
br.Dispose();
|
br.Dispose();
|
||||||
}
|
break;
|
||||||
else if (at == ArchiveType.Zip)
|
|
||||||
|
case ArchiveType.Rar:
|
||||||
|
RarArchive ra = RarArchive.Open(input, new ReaderOptions { LeaveStreamOpen = false });
|
||||||
|
foreach (RarArchiveEntry entry in ra.Entries)
|
||||||
{
|
{
|
||||||
|
if (entry != null && !entry.IsDirectory)
|
||||||
|
{
|
||||||
|
logger.Verbose("Entry found: '" + entry.Key + "': "
|
||||||
|
+ (size == 0 ? entry.Size : size) + ", "
|
||||||
|
+ (crc == "" ? entry.Crc.ToString("X").ToLowerInvariant() : crc));
|
||||||
|
|
||||||
|
roms.Add(new Rom
|
||||||
|
{
|
||||||
|
Type = ItemType.Rom,
|
||||||
|
Name = entry.Key,
|
||||||
|
Size = (size == 0 ? entry.Size : size),
|
||||||
|
CRC = (crc == "" ? entry.Crc.ToString("X").ToLowerInvariant() : crc),
|
||||||
|
|
||||||
|
Machine = new Machine
|
||||||
|
{
|
||||||
|
Name = gamename,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ArchiveType.Tar:
|
||||||
|
TarArchive ta = TarArchive.Open(input, new ReaderOptions { LeaveStreamOpen = false });
|
||||||
|
foreach (TarArchiveEntry entry in ta.Entries)
|
||||||
|
{
|
||||||
|
if (entry != null && !entry.IsDirectory)
|
||||||
|
{
|
||||||
|
logger.Verbose("Entry found: '" + entry.Key + "': "
|
||||||
|
+ (size == 0 ? entry.Size : size) + ", "
|
||||||
|
+ (crc == "" ? entry.Crc.ToString("X").ToLowerInvariant() : crc));
|
||||||
|
|
||||||
|
roms.Add(new Rom
|
||||||
|
{
|
||||||
|
Type = ItemType.Rom,
|
||||||
|
Name = entry.Key,
|
||||||
|
Size = (size == 0 ? entry.Size : size),
|
||||||
|
CRC = (crc == "" ? entry.Crc.ToString("X").ToLowerInvariant() : crc),
|
||||||
|
|
||||||
|
Machine = new Machine
|
||||||
|
{
|
||||||
|
Name = gamename,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ArchiveType.Zip:
|
||||||
ZipFile zf = new ZipFile();
|
ZipFile zf = new ZipFile();
|
||||||
ZipReturn zr = zf.Open(input, new FileInfo(input).LastWriteTime.Ticks, true);
|
ZipReturn zr = zf.Open(input, new FileInfo(input).LastWriteTime.Ticks, true);
|
||||||
if (zr != ZipReturn.ZipGood)
|
if (zr != ZipReturn.ZipGood)
|
||||||
@@ -463,58 +547,7 @@ namespace SabreTools.Helper.Tools
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
else if (at == ArchiveType.SevenZip)
|
|
||||||
{
|
|
||||||
SevenZipArchive sza = SevenZipArchive.Open(input, new ReaderOptions { LeaveStreamOpen = false });
|
|
||||||
foreach (SevenZipArchiveEntry entry in sza.Entries)
|
|
||||||
{
|
|
||||||
if (entry != null && !entry.IsDirectory)
|
|
||||||
{
|
|
||||||
logger.Verbose("Entry found: '" + entry.Key + "': "
|
|
||||||
+ (size == 0 ? entry.Size : size) + ", "
|
|
||||||
+ (crc == "" ? entry.Crc.ToString("X").ToLowerInvariant() : crc));
|
|
||||||
|
|
||||||
roms.Add(new Rom
|
|
||||||
{
|
|
||||||
Type = ItemType.Rom,
|
|
||||||
Name = entry.Key,
|
|
||||||
Size = (size == 0 ? entry.Size : size),
|
|
||||||
CRC = (crc == "" ? entry.Crc.ToString("X").ToLowerInvariant() : crc),
|
|
||||||
|
|
||||||
Machine = new Machine
|
|
||||||
{
|
|
||||||
Name = gamename,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (at != ArchiveType.Tar)
|
|
||||||
{
|
|
||||||
reader = ReaderFactory.Open(File.OpenRead(input));
|
|
||||||
while (reader.MoveToNextEntry())
|
|
||||||
{
|
|
||||||
if (reader.Entry != null && !reader.Entry.IsDirectory)
|
|
||||||
{
|
|
||||||
logger.Verbose("Entry found: '" + reader.Entry.Key + "': "
|
|
||||||
+ (size == 0 ? reader.Entry.Size : size) + ", "
|
|
||||||
+ (crc == "" ? reader.Entry.Crc.ToString("X").ToLowerInvariant() : crc));
|
|
||||||
|
|
||||||
roms.Add(new Rom
|
|
||||||
{
|
|
||||||
Type = ItemType.Rom,
|
|
||||||
Name = reader.Entry.Key,
|
|
||||||
Size = (size == 0 ? reader.Entry.Size : size),
|
|
||||||
CRC = (crc == "" ? reader.Entry.Crc.ToString("X").ToLowerInvariant() : crc),
|
|
||||||
|
|
||||||
Machine = new Machine
|
|
||||||
{
|
|
||||||
Name = gamename,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -1169,6 +1202,12 @@ namespace SabreTools.Helper.Tools
|
|||||||
bool success = false;
|
bool success = false;
|
||||||
string tempFile = Path.GetTempFileName();
|
string tempFile = Path.GetTempFileName();
|
||||||
|
|
||||||
|
// If either list of roms is null or empty, return
|
||||||
|
if (inputFiles == null || roms == null || inputFiles.Count == 0 || roms.Count == 0)
|
||||||
|
{
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
|
||||||
// If the number of inputs is less than the number of available roms, return
|
// If the number of inputs is less than the number of available roms, return
|
||||||
if (inputFiles.Count < roms.Count)
|
if (inputFiles.Count < roms.Count)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user