Limite à la longueur des paramètres d'un modèle
#4230
Closed
opened 4 years ago by RealET
·
5 comments
No Branch/Tag Specified
2.0
3.0
3.1
dev/issue_4850_role_list
master
spip-3.1
spip-3.2
spip/3.0.0
spip/3.0.1
spip/3.0.10
spip/3.0.11
spip/3.0.12
spip/3.0.13
spip/3.0.14
spip/3.0.15
spip/3.0.16
spip/3.0.17
spip/3.0.18
spip/3.0.19
spip/3.0.2
spip/3.0.21
spip/3.0.22
spip/3.0.23
spip/3.0.24
spip/3.0.25
spip/3.0.26
spip/3.0.27
spip/3.0.28
spip/3.0.3
spip/3.0.4
spip/3.0.5
spip/3.0.6
spip/3.0.7
spip/3.0.8
spip/3.0.9
spip/3.1.0
spip/3.1.1
spip/3.1.10
spip/3.1.11
spip/3.1.12
spip/3.1.13
spip/3.1.14
spip/3.1.15
spip/3.1.2
spip/3.1.3
spip/3.1.4
spip/3.1.5
spip/3.1.6
spip/3.1.7
spip/3.1.8
spip/3.1.9
spip/3.2.0
spip/3.2.1
spip/3.2.10
spip/3.2.11
spip/3.2.12
spip/3.2.2
spip/3.2.3
spip/3.2.4
spip/3.2.5
spip/3.2.6
spip/3.2.7
spip/3.2.8
spip/3.2.9
spip/4.0.0
spip/4.0.0-alpha
spip/4.0.0-beta
spip/4.0.1
spip/4.0.2
spip/4.0.3
v0.3.1
v0.4.0
v0.4.1
v0.4.2
v0.4.3
v0.4.4
v0.4.5
v0.4.6
v0.4.7
v0.5.0
v0.6.0
v0.7.0
v0.7.1
v0.7.2
v0.7.3
v0.8.0
v0.8.1
v0.8.10
v0.8.11
v0.8.12
v0.8.13
v0.8.14
v0.8.15
v0.8.16
v0.8.17
v0.8.18
v0.8.19
v0.8.2
v0.8.3
v0.8.4
v0.8.5
v0.8.6
v0.8.7
v0.8.8
v0.8.9
v0.9.1
v0.9.10
v0.9.11
v0.9.12
v0.9.13
v0.9.14
v0.9.15
v0.9.16
v0.9.17
v0.9.18
v0.9.19
v0.9.2
v0.9.20
v0.9.21
v0.9.3
v0.9.4
v0.9.5
v0.9.6
v0.9.7
v0.9.8
v0.9.9
v1.0.0
v1.1.0
v1.2.0
v1.3.0
v1.3.1
v1.3.10
v1.3.11
v1.3.12
v1.3.13
v1.3.14
v1.3.15
v1.3.16
v1.3.17
v1.3.2
v1.3.3
v1.3.4
v1.3.5
v1.3.6
v1.3.7
v1.3.8
v1.3.9
v1.4.0
v1.5.0
v1.5.1
v1.5.2
v1.5.7
v1.6.0
v1.6.1
v1.6.2
v1.6.3
v1.6.4
v1.6.5
v2.0.0
v2.0.1
v2.0.2
v2.0.3
v3.0.0
v3.0.1
v3.0.2
v3.0.3
v3.1.0
Milestone
Set milestone
Clear milestone
No items
No Milestone
Assignees
Assign users
Clear assignees
No Assignees
3 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.
No due date set.
Dependencies
This issue currently doesn't have any dependencies.
Reference in new issue
There is no content yet.
Delete Branch '%!s(MISSING)'
Deleting a branch is permanent. It CANNOT be undone. Continue?
No
Yes
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
Et voici quelqu'un d'impacté par le problème : https://contrib.spip.net/Plugin-Image-Cliquable#comment501790
RealET 🔸 a écrit :
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
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
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