Swallow exceptions from bad DDS files

This commit is contained in:
Timothy Baldridge 2021-06-18 17:33:58 -06:00
parent 5a501226c3
commit 3703f3f558
3 changed files with 28 additions and 14 deletions

View File

@ -34,7 +34,7 @@ namespace Wabbajack.ImageHashing
PerceptualHash.Write(bw); PerceptualHash.Write(bw);
} }
public static async Task<ImageState> FromImageStream(Stream stream, Extension ext, bool takeStreamOwnership = true) public static async Task<ImageState?> FromImageStream(Stream stream, Extension ext, bool takeStreamOwnership = true)
{ {
var ms = new MemoryStream(); var ms = new MemoryStream();
await stream.CopyToAsync(ms); await stream.CopyToAsync(ms);
@ -57,6 +57,11 @@ namespace Wabbajack.ImageHashing
return img.ImageState(); return img.ImageState();
} }
catch (Exception ex)
{
Utils.Log($"Error getting ImageState: {ex}");
return null;
}
finally finally
{ {
img?.Dispose(); img?.Dispose();

View File

@ -85,6 +85,8 @@ namespace Wabbajack.ImageHashing
} }
public static async Task<PHash> FromStream(Stream stream, Extension ext, bool takeStreamOwnership = true) public static async Task<PHash> FromStream(Stream stream, Extension ext, bool takeStreamOwnership = true)
{
try
{ {
var ms = new MemoryStream(); var ms = new MemoryStream();
await stream.CopyToAsync(ms); await stream.CopyToAsync(ms);
@ -101,8 +103,15 @@ namespace Wabbajack.ImageHashing
{ {
throw new NotImplementedException("Only DDS and TGA files supported by PHash"); throw new NotImplementedException("Only DDS and TGA files supported by PHash");
} }
return img.PerceptionHash(); return img.PerceptionHash();
} }
catch (Exception ex)
{
Utils.Log($"Error getting PHASH {ex}");
return default;
}
}
public static async Task<PHash> FromFile(AbsolutePath path) public static async Task<PHash> FromFile(AbsolutePath path)
{ {

View File

@ -227,7 +227,7 @@ namespace Wabbajack.VirtualFileSystem
}; };
if (Consts.TextureExtensions.Contains(relPath.FileName.Extension)) if (Consts.TextureExtensions.Contains(relPath.FileName.Extension))
self.ImageState = await ImageHashing.ImageState.FromImageStream(stream, relPath.FileName.Extension, false); self.ImageState = await ImageState.FromImageStream(stream, relPath.FileName.Extension, false);
self.FillFullPath(depth); self.FillFullPath(depth);