Changeset 61253 in spip-zone


Ignore:
Timestamp:
May 13, 2012, 2:36:18 PM (9 years ago)
Author:
fil@…
Message:

la bonne solution etait en fait d'augmenter (precautionneusement) pcre.backtrack_limit

Location:
_plugins_/textwheel
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/textwheel/inc/lien.php

    r59005 r61253  
    290290define('_EXTRAIRE_LIENS', ',' . '\[[^\[\]]*(?:<-|->).*?\]' . '|<a\b.*?</a\b' . '|<\w.*?>' . '|((?:https?:/|www\.)[^"\'\s\[\]\}\)<>]*)' .',imsS');
    291291
     292
    292293// Les URLs brutes sont converties en <a href='url'>url</a>
    293294// http://doc.spip.org/@traiter_raccourci_liens
    294295function traiter_raccourci_liens($t) {
    295296        $t = preg_replace_callback(_EXTRAIRE_LIENS, 'traiter_autoliens', $t);
     297
     298        include_spip('inc/ressource');
     299        if (defined('_EXTRAIRE_RESSOURCES'))
     300        $t = preg_replace_callback(_EXTRAIRE_RESSOURCES, 'traiter_ressources', $t);
     301
    296302        // echapper les autoliens eventuellement inseres (en une seule fois)
    297303        if (strpos($t,"<html>")!==false)
  • _plugins_/textwheel/inc/texte.php

    r61217 r61253  
    172172}
    173173
    174 define('_PROTEGE_BLOCS', ',<(html|code|cadre|frame|script)\b[^>]*>,UimsS');
     174define('_PROTEGE_BLOCS', ',<(html|code|cadre|frame|script)\b([^>]*)>(.*)</\1>,UimsS');
    175175
    176176// - pour $source voir commentaire infra (echappe_retour)
     
    182182                return $letexte;
    183183
     184        // si le texte recu est long PCRE risque d'exploser, on
     185        // fait donc un mic-mac pour augmenter pcre.backtrack_limit
     186        if (($len = strlen($letexte)) > 100000) {
     187                if (!$old = @ini_get('pcre.backtrack_limit')) $old = 100000;
     188                if ($len > $old) {
     189                        $a = @ini_set('pcre.backtrack_limit', $len);
     190                        spip_log("ini_set pcre.backtrack_limit=$len ($old)");
     191                }
     192        }
     193
    184194        if (($preg OR strpos($letexte,"<")!==false)
    185         AND preg_match_all($preg ? $preg : _PROTEGE_BLOCS, $letexte, $matches, PREG_SET_ORDER))
     195          AND preg_match_all($preg ? $preg : _PROTEGE_BLOCS, $letexte, $matches, PREG_SET_ORDER))
    186196                foreach ($matches as $regs) {
    187                         $init = $regs[0];
    188                         $tag = $regs[1];
    189                         $a = stripos($letexte, $tag);
    190                         $b = stripos($letexte, "</$tag>", $a);
    191 
    192                         if ($a and $b) {
    193                                 $regs[0] = substr($letexte, $a-1, $b - $a + strlen("</$tag>") + 1);
    194 
    195                                 $regs[3] = substr($letexte, $a-1 + strlen($init),
    196                                         $b - $a - strlen($init) + 1);
    197 
    198                                 // echappements tels quels ?
    199                                 if ($no_transform) {
    200                                         $echap = $regs[0];
    201                                 }
    202 
    203                                 // sinon les traiter selon le cas
    204                                 else if (function_exists($f = 'traiter_echap_'.strtolower($regs[1])))
    205                                         $echap = $f($regs);
    206                                 else if (function_exists($f = $f.'_dist'))
    207                                         $echap = $f($regs);
    208 
    209                                 $letexte = str_replace($regs[0],
    210                                         code_echappement($echap, $source, $no_transform),
    211                                         $letexte);
     197                        // echappements tels quels ?
     198                        if ($no_transform) {
     199                                $echap = $regs[0];
    212200                        }
     201
     202
     203                        // sinon les traiter selon le cas
     204                        else if (function_exists($f = 'traiter_echap_'.strtolower($regs[1])))
     205                                $echap = $f($regs);
     206                        else if (function_exists($f = $f.'_dist'))
     207                                $echap = $f($regs);
     208
     209                        $letexte = str_replace($regs[0],
     210                                code_echappement($echap, $source, $no_transform),
     211                                $letexte);
    213212                }
    214213
  • _plugins_/textwheel/plugin.xml

    r61218 r61253  
    44        <icon>textwheel-64.png</icon>
    55       
    6         <version>0.8.2</version>
     6        <version>0.8.3</version>
    77        <etat>stable</etat>
    88        <categorie>outil</categorie>
Note: See TracChangeset for help on using the changeset viewer.