1

Provoque une erreur "yuaronet indisponible" au moment de poster...

Je n'ai pas fait gaffe au moment de copier le lien vers une image que c'etait une image embarqué, comme j'ai voulu la réduire j'ai mis directement entre des balises \[img=] et yN m'a répondu avec un "en rade"

Edit:

Hmmm il semble que ca soit plus lié a la longueur que le type de lien en fait si je raccourcis le lien ca passe

Ok apres test, voici la longueur a partir du quel ca foire:

data:image/jpeg;base64,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

-> 2727 caracteres
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

2

Ah tiens c'est intéressant : je vois cette erreur très occasionnellement (1 fois tous les deux mois je dirais) et je n'ai jamais pu mettre la main dessus vu que jusqu'ici personne n'avait fait de bug report donc je n'avais pas les données qui la provoquait. Ce qui m'intrigue c'est qu'elle est provoquée par l'application d'une regexp (pour matcher le tag [img]) mais que l'erreur remontée par PHP est "expression invalide" alors que l'expression est constante, il n'y a que le message qu'on essaie de matcher qui change.

Maintenant que j'ai un exemple qui d'après ce que tu dis permet de reproduire le problème, je devrais pouvoir mieux comprendre ce qui coince.

[edit] Bon je n'y arrive pas, j'ai tenté d'isoler le problème mais ça ne provoque pas la même erreur. Si jamais ça inspire quelqu'un, voilà comment je croyais pouvoir reproduire le souci, je retenterai le coup chez moi avec le reste du code de yN :
$pattern_url = '(?:[!%#$%&\'()*+,./0-9:;=?@_~-]|\\pL)+'; $pattern = "`\\[img\\]($pattern_url)\\[/img\\]`msu"; $subject = "[img]" . "data:image/jpeg;base64,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[/img]"; var_dump (preg_match_all ($pattern, $subject, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER)); // L'erreur est provoquée ici, cet appel échoue je suis même obligé de séparer le tag img et le contenu dans le code sinon ça ne passe pas, au moins ça devrait pas être trop dur à reproduire grin
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Tu as oublié les \[img]\[/img] dans le $subject non?

Sinon ca peux etre lié a la config de PHP sur le serveur?
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

4

Oui en effet c'est n'importe quoi mon code grin

Mais en ajoutant les tags manquants ça ne provoque toujours pas le même bug. J'ai tenté sur le serveur de prod au cas où, mais toujours rien. Je me demande si ça n'est pas une conséquence d'un changement global (genre locale ou autre), pour le moment je n'ai pas tous les accès pour reproduire exactement le même contexte.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

5

Idem ici le bout de code (avec les tags) me retourne "int(0)"
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

6

Ah non moi la nouvelle version retourne bien "1" comme attendu, mais visiblement sur le serveur ça retourne "false" (comme si la regexp était tout à coup invalide, c'est ça qui m'intrigue).
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

7

Comme Godzil, en faisant un copier coller de ton code, j'ai int(0)
(PHP 7.2.6)
avatar

8

Oui il est buggé (cf. remarque de Godzil ./3), j'édite mon message pour ajouter les tags qui manquent.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

9

Ah oui, pardon, je pensais que tu l'avais corrigé depuis smile
Ça sort donc bien 1 smile
avatar

10

Oh ok, int(1) aussi ici avec la version mise a jour
avatar
Proud to be CAKE©®™


GCC4TI importe qui a problème en Autriche, pour l'UE plus et une encore de correspours nucléaire, ce n'est pas ytre d'instérier. L'état très même contraire, toujours reconstruire un pouvoir une choyer d'aucrée de compris le plus mite de genre, ce n'est pas moins)
Stalin est l'élection de la langie.

11

Ouep et pourtant ça a l'air de péter de façon assez fiable sur yN, je suis vraiment curieux de comprendre d'où vient la différence grin

[edit] Bon voilà une reproduction du problème qui me semble minimale :
<?php $pattern = '/(?=(((?:a|b)+)))/'; $subject = str_repeat ('a', 2726); var_dump (preg_match_all ($pattern, $subject, $matches));Le code affiche "false", ce qui correspond d'après la documentation à un échec de la fonction preg_match_all (s'il s'agissait simplement d'une chaine qui ne correspond pas à l'expression, la fonction devrait retourner 0). Si je change la constante passée à str_repeat de 2726 à 2725 la fonction réussit, donc Godzil avait bien identifié la longueur minimale de chaine qui suffit à déclencher le problème (en revanche le contenu de la chaine importe peu, pourvu qu'il corresponde à l'expression). Si J'essaie de simplifier l'expression par exemple en remplaçant a|b par simplement a ou en supprimant l'un des groupes (capturant ou non), la fonction réussit également.

Ce qui est amusant c'est que le bug semble se produire avec toutes les versions de PHP 7.* (j'ai testé avec http://sandbox.onlinephpfunctions.com/), à ceci près que la limite à laquelle la fonction casse n'est pas exactement la même (les versions 7.1.0 et 7.2.4 ont la même limite que le serveur de yN). En revanche il n'existait pas sur les versions 5.* qui font tourner le code sans problème.

Je n'ai pas vraiment d'explication, mais j'aurais tendance à miser sur une limitation interne du moteur d'expression régulières qui refuse une trop grosse complexité pour une raison qui m'échappe (mais ne signale aucune erreur explicite). En tout cas je n'ai pas non plus de proposition de correction, à part peut-être limiter les URLs à un nombre de caractères qui ne déclenche pas ce problème (ça reste un bout de sparadrap, tout ce que ça va permettre c'est de ne plus afficher un message d'erreur incompréhensible).

[edit 2] Bingo, c'est une limitation dans le mode JIT de libpcre qui échoue volontairement quand la taille max autorisée de la pile est dépassée, mais PHP ne rattrape pas correctement l'erreur et échoue sans donner de détail : https://bugs.php.net/bug.php?id=70110
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

12

#PHP# tongue
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

13

Bon, je n'ai même pas la possibilité d'ajouter une rustine, puisque visiblement libpcre n'apprécie pas non plus de compiler des regex avec un nombre de répétition élevé (a* ou a+ ne posent pas de problème, mais a{1,1000} échoue par exemple). Bref, ça risque de rester comme ça jusqu'à ce que PHP corrige ce bug et qu'Infomaniak se mette à jour, c'est à dire probablement aux alentours de 2042.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

14

PHP 7.3 arrive lentement, faut espérer que ça soit réglé.
avatar

15

Autre solution : je viens de faire quelques tests de performance sur le site avec et sans la fameuse option "pcre.jit" activée et la différence est minime (environ 4% d'écart en moyenne par page). Du coup le plus simple est juste de la désactiver, j'essaierai simplement de penser à la remettre si un jour le bug est corrigé.
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)