Caractères spéciaux d'expression régulière présents dans une chaîne de recherche #3217

Closed
opened 9 years ago by miros · 2 comments
miros commented 9 years ago

Bonjour,

J'ai une boucle <BOUCLE_recherche(FORUMS){recherche}{exclus}{tri points,inverse}{0,5}> au sein de l'affichage d'un forum qui permet d'afficher les autres posts similaires; pour cela, l'argument recherche est renseigné avec le titre du forum en cours d'affichage.

Cela fonctionne bien sur la plupart des pages sauf sur un forum ayant le titre suivant: Sortie du kit compatible SPIP 3 ??

J'ai une erreur MySQL 1139:

Got error 'repetition-operator operand invalid' from regexp
SELECT t.id_forum, t.titre, t.texte, t.auteur, t.email_auteur, t.nom_site, t.url_site FROM spip_forum AS t WHERE t.titre REGEXP 'Sortie du kit compatible SPIP 3 ??|Sortie|compatible|SPIP' OR ...

Ce sont les ?? qui coincent car manifestament ils sont interprétés en tant que métacaractères dans la regex, n'ayant pas été échappés.

J'ai fait un autre essai en mettant d'autres opérateurs de regex: Sortie kit[0-9]* compatib(ilité|le) SPIP 3 ??, qui confirme ce que je pensais:

Erreur SQL 1139
Got error 'repetition-operator operand invalid' from regexp
SELECT ... WHERE t.titre REGEXP 'Sortie kit[0-9]* compatib(ilite|le) SPIP 3 ??|Sortie|kit[0-9]*|compatib(ilite|le)|SPIP' OR ...

à savoir la chaîne de recherche n'est pas prétraitée, et les caractères spéciaux sont repris tels quels, d'où le plantage MySQL.

Je propose donc les corrections ci-joint pour ecrire/inc/rechercher.php (commentaires avec pverrier).

Bonjour, J'ai une boucle `<BOUCLE_recherche(FORUMS){recherche}{exclus}{tri points,inverse}{0,5}>` au sein de l'affichage d'un forum qui permet d'afficher les autres posts similaires; pour cela, l'argument recherche est renseigné avec le titre du forum en cours d'affichage. Cela fonctionne bien sur la plupart des pages sauf sur un forum ayant le titre suivant: `Sortie du kit compatible SPIP 3 ??` J'ai une erreur MySQL 1139: <pre> Got error 'repetition-operator operand invalid' from regexp SELECT t.id_forum, t.titre, t.texte, t.auteur, t.email_auteur, t.nom_site, t.url_site FROM spip_forum AS t WHERE t.titre REGEXP 'Sortie du kit compatible SPIP 3 ??|Sortie|compatible|SPIP' OR ... </pre> Ce sont les `??` qui coincent car manifestament ils sont interprétés en tant que métacaractères dans la regex, n'ayant pas été échappés. J'ai fait un autre essai en mettant d'autres opérateurs de regex: `Sortie kit[0-9]* compatib(ilité|le) SPIP 3 ??`, qui confirme ce que je pensais: <pre> Erreur SQL 1139 Got error 'repetition-operator operand invalid' from regexp SELECT ... WHERE t.titre REGEXP 'Sortie kit[0-9]* compatib(ilite|le) SPIP 3 ??|Sortie|kit[0-9]*|compatib(ilite|le)|SPIP' OR ... </pre> à savoir la chaîne de recherche n'est pas prétraitée, et les caractères spéciaux sont repris tels quels, d'où le plantage MySQL. Je propose donc les corrections ci-joint pour `ecrire/inc/rechercher.php` (commentaires avec `pverrier`).
Poster

J'ai mis 3.1 pour la version, j'aurais peut-être dû mettre 3.0 (je suis sur la 3.0.16).

J'ai mis 3.1 pour la version, j'aurais peut-être dû mettre 3.0 (je suis sur la 3.0.16).
Owner

Appliqué par commit r21716.
Statut changé à Fermé

Appliqué par commit r21716. **Statut changé à Fermé**
Sign in to join this conversation.
No Milestone
No project
No Assignees
2 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.