[spip-dev] les liens [[]] et [->] sont cassés par 10292

Voici le texte que j'ai dans un article :

L'OCDE préfère parler d'un {« accroissement de la dispersion
salariale} [[ [{Perspectives économiques de
l'OCDE}->http://www.oecd.org/document/4/0,3343,fr_2649_201185_20347588_1_1_1_1,00.html]
- Vol. 2007-1, n°~81, mai 2007, p. ~184. ]]{ »}.

en 10291 ça sort bien ; en 10292 c'est la cata, on voit l'url et écrit
spip_out etc.

ça se voit ici http://www.monde-diplomatique.fr/carnet/2007-07-20-Mobilite-sociale
(pas longtemps j'espère)

Il serait gentil de ne pas tout pêter juste pour le fun :slight_smile:

-- Fil

Voici le texte que j'ai dans un article :

L'OCDE préfère parler d'un {« accroissement de la dispersion
salariale} [[ [{Perspectives économiques de
l'OCDE}->http://www.oecd.org/document/4/0,3343,fr_2649_201185_20347588_1_1_1_1,00.html\]
- Vol. 2007-1, n°~81, mai 2007, p. ~184. ]]{ »}.

en 10291 ça sort bien ; en 10292 c'est la cata, on voit l'url et écrit
spip_out etc.

ça se voit ici Le mythe de la mobilité sociale aux Etats-Unis (Le Monde diplomatique, 20 juillet 2007)
(pas longtemps j'espère)

Solution d'urgence: mets un return plutot qu'un espace ici:

  [[ [{Perspectives

et ça résoud le pb(du moins sur ma version de PHP)

Il serait gentil de ne pas tout pêter

"tout" ? C'est visiblement une vieille Regexp (j'y ai pas touchés) dont le blindage insuffisant se révèle soudainement.
Je pars à sa recherche.

Committo,Ergo:Sum

ça a l'air encore d'un bug PCRE: ligne 1407 de inc/texte.php, remplacer:
  if (preg_match(",^ *<([^>]*)>,", $note_texte, $regs)){
par
  if (preg_match(",^<([^>]*)>,", $note_texte, $regs)){
et ça marche, mais quel rapport ?

J'envoie qcch de plus général dans un moment, j'avais qqch sur le feu dans ce fichier.

Committo,Ergo:Sum

Solution d'urgence: mets un return plutot qu'un espace ici:

merci pour 10301 qui résoud

"tout" ? C'est visiblement une vieille Regexp (j'y ai pas touchés)
dont le blindage insuffisant se révèle soudainement.

ho ho jolie réponse :-p
si tu détruis la vieille grange en reculant avec ta voiture, tu peux
dire que c'est de la faute de la grange qui n'était pas blindée -- ça
n'est pas faux !

Pour moi ça prouve surtout qu'il faut augmenter nos tests unitaires,
surtout quand on s'attaque aux parties dites "vieilles" du code. (et
tous les membres de la zone peuvent en faire) Pourquoi ne commites-tu
pas le test que tu as mis en commentaire de [10301] ?

-- Fil

Oui, mais les ltrim rajoutés en [10303] réintroduisent (du moins dans ma version de PHP) le bug que [10301] avait corrigé en réduisant la fonctionnalité.
Ce n'est en fait pas un bug PCRE derrière, car même en utilisant des strpos le problème persiste.
A priori c'est plutot après qu'on se met à réinterpréter à tort qqch.

Committo,Ergo:Sum

Ce n'est en fait pas un bug PCRE derrière, car même en utilisant des
strpos le problème persiste.
A priori c'est plutot après qu'on se met à réinterpréter à tort qqch.

OK vu, c'est l'ordre des choses qui a changé : si je schématise,
avant on avait à interpréter

[[ [truc->...] ]]

et maintenant on a

[[ <a ...>truc</a> ]]

et du coup le test sur le nom de la note (<....>) attrape le <a ...>

Un fix rapide c'est d'interdire les guillemets " et ' dans les noms de
notes, mais c'est plus un contournement qu'autre chose.

-- Fil

Ce n'est en fait pas un bug PCRE derrière, car même en utilisant des
strpos le problème persiste.
A priori c'est plutot après qu'on se met à réinterpréter à tort qqch.

OK vu, c'est l'ordre des choses qui a changé : si je schématise,
avant on avait à interpréter

[[ [truc->...] ]]

et maintenant on a

[[ <a ...>truc</a> ]]

et du coup le test sur le nom de la note (<....>) attrape le <a ...>

oui, j'en étais là aussi.

Un fix rapide c'est d'interdire les guillemets " et ' dans les noms de
notes, mais c'est plus un contournement qu'autre chose.

Oui. Cela dit ça montre autre chose: si j'ai l'idée d'écrire:

[[<b>Remarque</b>....]]

aujourd'hui comme hier SPIP va considérer que "b" est le nom de la note, et le "</b>" restant va complètement casser la structure xml.
J'aurais donc plutot envie de controler qu'il n'y a pas "</NOM_DE_NOTE>" plus loin.

Au passage, je trouve ce système de note pas très pratique: si je veux une numérotation automatique autre qu'en chiffres arabes (a b c, i ii iii iv v, * ** *** etc) il n'a pas moyen de greffer une fonction qui le fasse, c'est dommage.

Committo,Ergo:Sum