Limite à la longueur des paramètres d'un modèle #4230

Closed
opened 4 years ago by RealET · 5 comments
RealET commented 4 years ago

Bonjour,

C'est pas exactement Texwheel parce que le code concerné est dans le core. Mais ça se manifeste dans le traitement des raccourcis typo.
Bref.

J'ai constaté que si un modèle contenait trop de caractères, alors qu'il passait en PHP 5.6, il n'était plus interprété en PHP 7.

Test ici : https://contrib.spip.net/ecrire/?exec=article&id_article=5055

Et preuve du problème : https://3v4l.org/lqqIG qui montre qu'en PHP 5.6, la regex fonctionne, mais pas pour 7.0.32 - 7.3.0alpha2 (alors qu'avec un caractère de moins, ça passe partout : https://3v4l.org/k4bgd)
Code construit à partir de https://core.spip.net/projects/spip/repository/entry/branches/spip-3.2/ecrire/inc/lien.php#L294

Il semblerait que ce soit une limite de PCRE introduite avec PHP7 et son option jit activée par défaut :https://stackoverflow.com/questions/34849485/regex-not-working-for-long-pattern-pcres-jit-compiler-stack-limit-php7

En local, je n'ai plus le problème en ayant mis dans mes_options.php :
ini_set('pcre.jit', 0);

https://regex101.com/r/DqmJMs/2 permet de voir que la regex fait énormément de backtrack et donc d'étapes : 19105 étapes.

J'ai idée que l'usage de conditions serait plus efficace, mais j'ai pas trouvé comment.
https://www.rexegg.com/regex-conditionals.html#engines

Bonjour, C'est pas exactement Texwheel parce que le code concerné est dans le core. Mais ça se manifeste dans le traitement des raccourcis typo. Bref. J'ai constaté que si un modèle contenait trop de caractères, alors qu'il passait en PHP 5.6, il n'était plus interprété en PHP 7. Test ici : https://contrib.spip.net/ecrire/?exec=article&id_article=5055 Et preuve du problème : https://3v4l.org/lqqIG qui montre qu'en PHP 5.6, la regex fonctionne, mais pas pour 7.0.32 - 7.3.0alpha2 (alors qu'avec un caractère de moins, ça passe partout : https://3v4l.org/k4bgd) Code construit à partir de https://core.spip.net/projects/spip/repository/entry/branches/spip-3.2/ecrire/inc/lien.php#L294 Il semblerait que ce soit une limite de PCRE introduite avec PHP7 et son option jit activée par défaut :https://stackoverflow.com/questions/34849485/regex-not-working-for-long-pattern-pcres-jit-compiler-stack-limit-php7 En local, je n'ai plus le problème en ayant mis dans mes_options.php : ini_set('pcre.jit', 0); https://regex101.com/r/DqmJMs/2 permet de voir que la regex fait énormément de backtrack et donc d'étapes : 19105 étapes. J'ai idée que l'usage de conditions serait plus efficace, mais j'ai pas trouvé comment. https://www.rexegg.com/regex-conditionals.html#engines
Poster

Et voici quelqu'un d'impacté par le problème : https://contrib.spip.net/Plugin-Image-Cliquable#comment501790

Et voici quelqu'un d'impacté par le problème : https://contrib.spip.net/Plugin-Image-Cliquable#comment501790
Poster

RealET 🔸 a écrit :

Et voici quelqu'un d'impacté par le problème : https://contrib.spip.net/Plugin-Image-Cliquable#comment501790
Qui correspond à ceci en PHP : https://3v4l.org/17d58

RealET 🔸 a écrit : > Et voici quelqu'un d'impacté par le problème : https://contrib.spip.net/Plugin-Image-Cliquable#comment501790 Qui correspond à ceci en PHP : https://3v4l.org/17d58
Owner

oué, je me demande si c'est bien raisonable d'essayer de fixer ça. Un jour on va dire "j'ai passé guerre et paix en argument du modèle et ça marche pas"...
Bref il y aura toujours une limite vu qu'on passe par une regexp...
Version cible mise à 4.2

oué, je me demande si c'est bien raisonable d'essayer de fixer ça. Un jour on va dire "j'ai passé guerre et paix en argument du modèle et ça marche pas"... Bref il y aura toujours une limite vu qu'on passe par une regexp... **Version cible mise à 4.2**
Poster

Je suis d'accord avec toi cedric, d'autant plus qu'à partir de PHP 7.3, ça marche : Output for 7.3.0 - 7.3.26, 7.4.0 - 7.4.14, 8.0.0 - 8.0.2
Comme on peut le voir sur https://3v4l.org/lqqIG#v730

Je suis d'accord avec toi cedric, d'autant plus qu'à partir de PHP 7.3, ça marche : Output for 7.3.0 - 7.3.26, 7.4.0 - 7.4.14, 8.0.0 - 8.0.2 Comme on peut le voir sur https://3v4l.org/lqqIG#v730
b_b commented 2 years ago
Owner

Si tout le monde est d'accord et que SPIP 3.3 est compatible PHP 7.3, on peut fermer non ? Sinon on attend la version de SPIP qui nécessitera PHP 7.3 mini et zou :p

PS : j'ai bien ri avec le coup de guerre & paix en argument, merci :D

Si tout le monde est d'accord et que SPIP 3.3 est compatible PHP 7.3, on peut fermer non ? Sinon on attend la version de SPIP qui nécessitera PHP 7.3 mini et zou :p PS : j'ai bien ri avec le coup de guerre & paix en argument, merci :D
cerdic closed this issue 6 months ago
Sign in to join this conversation.
No Milestone
No Assignees
3 Participants
Notifications
Due Date

No due date set.

Dependencies

This issue currently doesn't have any dependencies.

Loading…
There is no content yet.