Ticket #1196 (closed defect: worksforme)
preg replace on ##########MACRO#([0-9]+)#
Reported by: | Veovis | Owned by: | xave |
---|---|---|---|
Priority: | normal | Milestone: | |
Component: | module:clearbricks | Version: | 2.3 |
Severity: | normal | Keywords: | |
Cc: |
Description
Description
Le module syntaxhl met en évidence un bug du noyau en affichant un beau ##########MACRO#0# sur mes pages à la place des emplacement de code.
Comment reproduire
- installer un dotclear 2.2 ou 2.3
- installer le plugin syntaxhl
- créer un billet avec du code d'un langagge quelconque comme sql:
/ [sql]
/* n'importe quoi */
/
- enregistrer le billet (c'est à ce moment que la transformation est effectuée, pas à l'affichage du billet en front)
- vérifier l'affichage final en front
Explication
dans le fichier .inc/libs/clearbricks/text.wiki2xhtml/class.wiki2xhtml.php ligne 314: $res = preg_replace('/##########MACRO#([0-9]+)#$/mse','$this->putMacro("$1")',$res);
Étant donné que le pattern peut se trouver n'importe où, pas seulement isolé sur une ligne, il n'est pas correct d'ajouter la détection de début et de fin de ligne, de fait, le modificateur m devient également obsolète.
Le modificateur s ne sert à rien, autant l'enlever.
Enfin, il n'y a qu'une seule parenthèse, ainsi pour catcher le nombre décrit par [0-9+], le remplacement doit contenir $0 et non $1
Patch (si pas de fichier uploadé)
la ligne devrait être remplacée par $res = preg_replace('/#{10}MACRO#([0-9]+)#/e','$this->putMacro("$0")',$res);
Attachments
Change History
Changed 14 years ago by Veovis
-
attachment
class.wiki2xhtml.php.patch
added
patch for ##########MACRO bug
comment:4 Changed 14 years ago by Veovis
j'ai mis à jour le patch. avec la version précédente, la valeur envoyée à $this->putMacro valait toujours 0. Donc, en présence de plusieurs ##########MACRO, ces marqueurs étaient tous remplacés par le même bloc n°0.
comment:5 Changed 13 years ago by franck
Pas moyen de reproduire ce bug avec ce contenu :
Test ///[sql] SELECT * FROM dc_users WHERE user_id = `admin` LIMIT 10; ///
J'obtiens un affichage correct :
<p>Test</p> <pre class="sql sql" style="font-family:inherit"><span style="color: #993333; font-weight: bold;">SELECT</span> <span style="color: #66cc66;">*</span> <span style="color: #993333; font-weight: bold;">FROM</span> dc_users <span style="color: #993333; font-weight: bold;">WHERE</span> user_id <span style="color: #66cc66;">=</span> <span style="color: #ff0000;">`admin`</span> <span style="color: #993333; font-weight: bold;">LIMIT</span> <span style="color: #cc66cc;">10</span>;</pre>
J'ai déjà obtenu la même erreur ##########MACRO#0# sans plugin additionnel, dans un projet Dotclear contenant des billets wiki mais contenant des bouts de XHTML. Et si je me souviens bien, cela bloquait avec une liste numérotée.