Fix file hash for split files with irregular filesize

This commit is contained in:
Deterous
2024-02-07 09:32:56 +09:00
parent bc3df52e75
commit 8ab6a9d694
4 changed files with 10 additions and 9 deletions
+1 -1
View File
@@ -9,7 +9,7 @@
<RuntimeIdentifiers>win-x86;win-x64;win-arm64;linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers> <RuntimeIdentifiers>win-x86;win-x64;win-arm64;linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors> <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Version>0.4.0</Version> <Version>0.4.1</Version>
<!-- Package Properties --> <!-- Package Properties -->
<Authors>Deterous</Authors> <Authors>Deterous</Authors>
+3 -1
View File
@@ -610,7 +610,9 @@ namespace IRDKit
missingOffsets1.Add(IRD2.FileKeys[i]); missingOffsets1.Add(IRD2.FileKeys[i]);
} }
// Print the file offsets that differ // Print the file offsets that differ
printText.AppendLine($"File Offsets not Present in {irdPath1}: {string.Join(", ", missingOffsets1)}"); if (missingOffsets1.Count > 0)
printText.AppendLine($"File Offsets not Present in {irdPath1}: {string.Join(", ", missingOffsets1)}");
if (missingOffsets2.Count > 0)
printText.AppendLine($"File Offsets not Present in {irdPath2}: {string.Join(", ", missingOffsets2)}"); printText.AppendLine($"File Offsets not Present in {irdPath2}: {string.Join(", ", missingOffsets2)}");
// Print any extra config data difference // Print any extra config data difference
+5 -6
View File
@@ -946,23 +946,22 @@ namespace LibIRD
if (fileClusters[i].Offset < smallestOffset) if (fileClusters[i].Offset < smallestOffset)
smallestOffset = fileClusters[i].Offset; smallestOffset = fileClusters[i].Offset;
} }
int firstSector = (int)(smallestOffset);
// If already encountered file offset, skip this file // If already encountered file offset, skip this file
if (Array.Exists(FileKeys, element => element == firstSector)) if (Array.Exists(FileKeys, element => element == smallestOffset))
continue; continue;
if (fileClusters.Length > 1) if (fileClusters.Length > 1)
Console.WriteLine($"Split file detected: {filePath}"); Console.WriteLine($"Split file detected: {filePath}");
// Add file offset to keys // Add file offset to keys
FileKeys[FileCount] = firstSector; FileKeys[FileCount] = smallestOffset;
// Determine whether file is in encrypted or decrypted region // Determine whether file is in encrypted or decrypted region
bool encrypted = false; bool encrypted = false;
for (int i = RegionCount - 1; i > 0; i--) for (int i = RegionCount - 1; i > 0; i--)
{ {
if (RegionStart[i] <= firstSector) if (RegionStart[i] <= smallestOffset)
{ {
encrypted = i % 2 == 1; encrypted = i % 2 == 1;
break; break;
@@ -986,7 +985,7 @@ namespace LibIRD
throw new InvalidFileSystemException("Disc region ended unexpectedly"); throw new InvalidFileSystemException("Disc region ended unexpectedly");
// Decrypt sector if necessary // Decrypt sector if necessary
if (encrypted) if (encrypted)
buf = DecryptSector(buf, firstSector + j); buf = DecryptSector(buf, (int)fileClusters[i].Offset + j);
// Hash sector // Hash sector
md5.TransformBlock(buf, 0, numBytes, null, 0); md5.TransformBlock(buf, 0, numBytes, null, 0);
} }
@@ -999,7 +998,7 @@ namespace LibIRD
throw new InvalidFileSystemException("Disc region ended unexpectedly"); throw new InvalidFileSystemException("Disc region ended unexpectedly");
// Decrypt partial sector if necessary // Decrypt partial sector if necessary
if (encrypted) if (encrypted)
buf = DecryptSector(buf, firstSector + (int)(fileClusters[i].Count / SectorSize)); buf = DecryptSector(buf, (int)fileClusters[i].Offset + (int)(fileClusters[i].Count / SectorSize));
// Hash partial sector // Hash partial sector
md5.TransformBlock(buf, 0, (int)(fileClusters[i].Count % SectorSize), null, 0); md5.TransformBlock(buf, 0, (int)(fileClusters[i].Count % SectorSize), null, 0);
} }
+1 -1
View File
@@ -6,7 +6,7 @@
<RuntimeIdentifiers>win-x86;win-x64;win-arm64;linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers> <RuntimeIdentifiers>win-x86;win-x64;win-arm64;linux-x64;linux-arm64;osx-x64;osx-arm64</RuntimeIdentifiers>
<LangVersion>latest</LangVersion> <LangVersion>latest</LangVersion>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors> <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<Version>0.4.0</Version> <Version>0.4.1</Version>
<PackageOutputPath>../nupkg</PackageOutputPath> <PackageOutputPath>../nupkg</PackageOutputPath>
<!-- Package Properties --> <!-- Package Properties -->