Что означает код HRESULT 0x80097001 (MSSIPOTF_E_OUTOFMEMRANGE)?

 
Предыдущий Следующий
TRUST_E_FINANCIAL_CRITERIA MSSIPOTF_E_CANTGETOBJECT

MSSIPOTF_E_OUTOFMEMRANGE

Диапазон из каталога выходит за пределы файла шрифта

MSSIPOTF_E_OUTOFMEMRANGE относится к диапазону байтов, на который ссылается шрифт, а не к обычной нехватке памяти процесса. Записи каталога таблиц OpenType описывают каждую таблицу с помощью смещения и длины. Если средство проверки не может разместить этот диапазон целиком в отображённом файле, оно должно остановиться, прежде чем интерпретировать произвольные байты как данные шрифта.

К такому состоянию могут привести неполная загрузка, повреждённый каталог таблиц, смещение, не исправленное после удаления таблицы, или арифметическое переполнение в программе, сформировавшей шрифт. Эта ошибка отличается от MSSIPOTF_E_FILETOOSMALL: данный код указывает на попытку обратиться за пределы допустимого отображённого диапазона, тогда как второй код означает, что последняя таблица выходит за конец файла.

Как провести диагностику

  • Сохраните исходный файл и до внесения изменений сравните его длину в байтах и хеш с исходным артефактом.
  • Выведите каталог таблиц командой ttx -l или с помощью другого независимого анализатора, затем сопоставьте каждое значение offset + length с размером файла.
  • Пересоберите шрифт из исходных данных вместо исправления смещений в подписанном двоичном файле: изменение структуры также меняет контрольные суммы и данные подписи.

Ссылки


Нужно найти другой код? Найти другой код состояния или ошибки.