ImageMagick.MagickResourceLimitErrorException: 'TooManyExceptions(异常处理暂停)
ImageMagick.MagickResourceLimitErrorException: 'TooManyExceptions (exception processing is suspended)
我收到这个错误:
ImageMagick.MagickResourceLimitErrorException: 'TooManyExceptions (exception processing is suspended) @ error/exception.c/ThrowException/969'
这条线
using (MagickImageCollection tiffPageCollection = new MagickImageCollection())
{
tiffPageCollection.Read(tifName); // fails here.
}
出现问题是因为92页的tif每页有3个这样的错误:
{"ASCII value for tag \"Copyright\" does not end in null byte. `TIFFFetchNormalTag' @ warning/tiff.c/TIFFWarnings/1007"} ImageMagick.MagickException {ImageMagick.MagickCoderWarningException}
超过了警告错误的数量,因此触发了 TooManyExceptions 错误。
这个URL暗示了一个解决方案:
http://www.imagemagick.org/discourse-server/viewtopic.php?t=33989
添加此处理程序:
private void MagickNET_Log (object sender, LogEventArgs e)
{
// write to a single log file...
if ((RemoteImageMagickEventLogging & e.EventType) != LogEvents.None)
{
switch (e.EventType)
{
case LogEvents.Exception:
if (!e.Message.Contains ("TIFFWarnings"))
{
TriggerRemoteLoggingEvent (e.EventType,
EZLogger.LoggingLevel.Note1, e.Message);
}
break;
}
}
}
它还提到此异常已添加到 "ImageMagick.Net 7.4.5 Q8 AnyCPU" 并且在早期版本中没有发生。我在 "ImageMagick.Net-Q16-AnyCPU v7.9.1" 上遇到了问题 我更新到 v7.10.0 后仍然遇到同样的问题。
那么,我的问题是:
ImageMagick 的哪些版本有和没有此功能?
将该处理程序交给我的代码的步骤是什么?
有没有办法增加允许警告的最大数量,我可以把这个限制提高到我不会达到的程度?
What versions of ImageMagick have and don't have this feature?
来自changelog, it was added as early as version 7.0.7-22. The body of work around this feature was in response to Google's OSS-fuzz project.
Is there a way to increase the maximum number of allowed warnings and I can just raise that limit to something so high that I will not hit it?
目前没有。该限制被硬编码为 MagickCore/exception.c
...
#define MaxExceptionList 64
但这是开源的,而且是一个相当新的功能。如果你 post 一个问题 'Bugs' message board, you may be able to have the developers revise the limit, or allow some resource attribute under polices.xml 由用户控制。展示真实世界的测试用例也有帮助,带有 64 条以上警告的 tiff 文件应该需要一定程度的审查。
此问题已在 Magick.NET 7.10.1.0:https://github.com/dlemstra/Magick.NET/releases/tag/7.10.1.0 中修复。 TooManyExceptions (exception processing is suspended)
异常将不再抛出,因为这已更改为警告。
我收到这个错误:
ImageMagick.MagickResourceLimitErrorException: 'TooManyExceptions (exception processing is suspended) @ error/exception.c/ThrowException/969'
这条线
using (MagickImageCollection tiffPageCollection = new MagickImageCollection())
{
tiffPageCollection.Read(tifName); // fails here.
}
出现问题是因为92页的tif每页有3个这样的错误:
{"ASCII value for tag \"Copyright\" does not end in null byte. `TIFFFetchNormalTag' @ warning/tiff.c/TIFFWarnings/1007"} ImageMagick.MagickException {ImageMagick.MagickCoderWarningException}
超过了警告错误的数量,因此触发了 TooManyExceptions 错误。
这个URL暗示了一个解决方案:
http://www.imagemagick.org/discourse-server/viewtopic.php?t=33989
添加此处理程序:
private void MagickNET_Log (object sender, LogEventArgs e)
{
// write to a single log file...
if ((RemoteImageMagickEventLogging & e.EventType) != LogEvents.None)
{
switch (e.EventType)
{
case LogEvents.Exception:
if (!e.Message.Contains ("TIFFWarnings"))
{
TriggerRemoteLoggingEvent (e.EventType,
EZLogger.LoggingLevel.Note1, e.Message);
}
break;
}
}
}
它还提到此异常已添加到 "ImageMagick.Net 7.4.5 Q8 AnyCPU" 并且在早期版本中没有发生。我在 "ImageMagick.Net-Q16-AnyCPU v7.9.1" 上遇到了问题 我更新到 v7.10.0 后仍然遇到同样的问题。
那么,我的问题是:
ImageMagick 的哪些版本有和没有此功能?
将该处理程序交给我的代码的步骤是什么?
有没有办法增加允许警告的最大数量,我可以把这个限制提高到我不会达到的程度?
What versions of ImageMagick have and don't have this feature?
来自changelog, it was added as early as version 7.0.7-22. The body of work around this feature was in response to Google's OSS-fuzz project.
Is there a way to increase the maximum number of allowed warnings and I can just raise that limit to something so high that I will not hit it?
目前没有。该限制被硬编码为 MagickCore/exception.c
...
#define MaxExceptionList 64
但这是开源的,而且是一个相当新的功能。如果你 post 一个问题 'Bugs' message board, you may be able to have the developers revise the limit, or allow some resource attribute under polices.xml 由用户控制。展示真实世界的测试用例也有帮助,带有 64 条以上警告的 tiff 文件应该需要一定程度的审查。
此问题已在 Magick.NET 7.10.1.0:https://github.com/dlemstra/Magick.NET/releases/tag/7.10.1.0 中修复。 TooManyExceptions (exception processing is suspended)
异常将不再抛出,因为这已更改为警告。