2009-08-14 20 views
0

J'utilise le merveilleux framework RegexKitLite basé sur la librairie ICU fournie avec Mac OS X et iPhone OS. Il a été facile jusqu'à présent, à l'exception de cette erreur qui apparaît par intermittence lors de la recherche des correspondances:Echec de l'assertion RegexKitLite par intermittence

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

Toute idée de ce qui pourrait être la cause?

+0

Y a-t-il quelque chose d'unique au sujet des types de cordes que vous utilisez? Est-il possible que vous essayez d'effectuer la même opération dans plus d'un thread? – dreamlax

+0

Cela ressemble à un problème RegexKitLite, et rien à voir avec regexes sé. Vous aurez probablement plus de chance sur un site consacré à RegexKitLite. –

Répondre

1

NOTE: Je suis l'auteur de RegexKitLite.

Il s'agit d'un échec d'assertion interne dans RegexKitLite. Il y a beaucoup de contrôles internes d'assertion intégrés. Celui-ci dit qu'après avoir récupéré une regex compilée mise en cache à partir du cache, la regex en cache récupérée n'est pas configurée exactement comme elle devrait l'être pour une raison quelconque.

La meilleure chose à faire est de soumettre un rapport de bug au sourceforge.net RegexKit bug tracker. Si possible, soumettez un cas de test reproduisant le bogue. C'est une conjecture totale, sauvage, à l'improviste, mais basée sur le message d'assertion, je parierais que cela a quelque chose à voir avec les opérations de correspondance dans lesquelles vous utilisez le paramètre range:, et cette plage est constamment 'en mouvement' Cette plage peut croiser la taille de la mémoire tampon petite/grande, quelque part autour de 2048. Une autre possibilité est la recherche de chaînes contenant des caractères Unicode et RegexKitLite utilise le tampon direct de chaînes, éventuellement sur une chaîne mutable et le tampon de sauvegarde a été réalloué il a grandi ou a diminué ... ou, une chaîne mutable qui était "non-Unicode" a été muté et contient maintenant des caractères Unicode, et il passe de la conversion UTF-16 mise en cache au tampon direct des chaînes. , cela vous aidera à affiner le cas de coin qui déclenche l'échec d'assertion Hey, au moins c'est detec un problème au lieu de marcher et de segmenter ou de renvoyer des chaînes de résultats fictives. :)