2009-08-14 14 views
0

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

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

Любая идея, что может быть причиной этого?

+0

Есть ли что-нибудь особенно уникальное в отношении типов струн, которые вы используете? Возможно ли, что вы пытаетесь выполнить одну и ту же операцию в нескольких потоках? – dreamlax

+0

Это звучит как проблема с RegexKitLite и не имеет никакого отношения к регулярным выражениям в sé. Вероятно, вам повезет на сайте, посвященном RegexKitLite. –

ответ

1

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

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

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

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