ImageMagick.MagickResourceLimitErrorException: 'TooManyExceptions (обработка исключений приостановлена)

Я получаю эту ошибку:

ImageMagick.MagickResourceLimitErrorException: 'TooManyExceptions (exception processing is suspended) @ error/exception.c/ThrowException/969'

На этой линии

using (MagickImageCollection tiffPageCollection = new MagickImageCollection())
{
    tiffPageCollection.Read(tifName);  // fails here.
}

Проблема возникает из-за того, что на странице 92 есть три ошибки, подобные этой на каждой странице:

{"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 и все еще имел ту же проблему.

Итак, мои вопросы:

  1. Какие версии ImageMagick имеют и не имеют этой функции?

  2. Какие шаги для передачи этого обработчика в мой код?

  3. Есть ли способ увеличить максимальное количество разрешенных предупреждений, и я могу просто поднять этот лимит до чего-то настолько высокого, чтобы я его не ударил?

2 ответа

Решение

Эта проблема была исправлена ​​в Magick.NET 7.10.1.0: https://github.com/dlemstra/Magick.NET/releases/tag/7.10.1.0. TooManyExceptions (exception processing is suspended) исключение больше не будет выброшено, потому что это было изменено в предупреждение.

Какие версии ImageMagick имеют и не имеют этой функции?

Из журнала изменений он был добавлен еще в версии 7.0.7-22. Основная работа вокруг этой функции была в ответ на проект Google OSS-fuzz.

Есть ли способ увеличить максимальное количество разрешенных предупреждений, и я могу просто поднять этот лимит до чего-то настолько высокого, чтобы я его не ударил?

Не сейчас. Предел жестко закодирован MagickCore/exception.c как...

#define MaxExceptionList 64

Но это с открытым исходным кодом, и довольно новая функция. Если вы опубликуете проблему на доске объявлений"Ошибки", вы можете попросить разработчиков пересмотреть ограничение или разрешить пользователю управлять атрибутом какого-либо ресурса в polices.xml. Также полезно представить реальный контрольный пример, и файл TIFF с более чем 64 предупреждениями должен потребовать некоторого уровня проверки.

Другие вопросы по тегам