Ошибка подтверждения RegexKitLite, возникающая периодически

Я использую замечательную платформу RegexKitLite, основанную на библиотеке ICU, которая поставляется с Mac OS X и iPhone OS. Пока он прошел гладко, за исключением этой ошибки, которая периодически появляется при поиске совпадений:

Internal Error
Invalid parameter not satisfying:
(cacheSlot->setToHash == buffer->hash) && (cacheSlot->setToLength == buffer->length) && (cacheSlot->setToUniChar == buffer->uniChar)

Есть идеи, что может быть причиной этого?

1 ответ

Решение

ПРИМЕЧАНИЕ: я являюсь автором RegexKitLite.

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

Лучшее, что вы можете сделать, это отправить отчет об ошибке на трекере ошибок sourceforge.net RegexKit. Если это вообще возможно, отправьте тестовый пример, который воспроизводит ошибку. Это полная, дикая, необычная догадка, но, основываясь на сообщении об утверждении, могу поспорить, что это как-то связано с операциями сопоставления, в которых вы используете range: параметр, и этот диапазон постоянно "движется" и сужается. Этот диапазон может пересекать малый / большой размер буфера, где-то около 2048 символов. Другой возможностью является поиск строк, содержащих символы Unicode, а RegexKitLite использует прямой буфер строк, возможно, на изменяемая строка и резервный буфер были перераспределены, потому что они выросли или сократились... или изменяемая строка, которая была "не-Unicode", была видоизменена и теперь содержит символы Unicode, и она имеет переключение с кэшированного преобразования UTF-16 на прямой буфер строк.

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

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