Есть ли надежный способ обнаружить, когда значение maxContours слишком велико или слишком мало (да, это тоже может быть проблемой)?
Да. Если вы уже собрали / имеете библиотеку синтаксического анализа TrueType / OpenType, как вы указали, это конкретное значение довольно легко проверить. Вам нужно будет проанализировать каждый из глифов (из таблицы 'glyf' , используя таблицу 'loca' в качестве индекса), получить число контуров из каждого глифа, один за другим, и сравните максимальный размер шрифта с максимальным значением 'maxp' .
Обратите внимание, что некоторые другие значения в 'maxp' не это просто проверить; например, maxZones, maxTwilightPoints, maxStorage, maxFunctionDefs, maxInstructionDefs, maxStackElements, maxSizeOfInstructions требуют синтаксического анализа дополнительных таблиц, а для некоторых из них - доступа к масштабатору и интерпретатору TrueType.
Небольшая предыстория: таблица 'maxp' (максимальный профиль) должна была быть ярлыком / сводкой потенциально полезных максимумов всего шрифта в качестве помощи в распределении памяти. Так что, вообще говоря, если значение в 'maxp' выше, чем фактическое значение шрифта, худшее, что может произойти, это то, что вы выделите слишком много памяти ... то есть, если вы находитесь на платформе, которая фактически использует все значения 'maxp' для этой цели.