Re: que fait cette expression régulièr e ?

"[email protected]" <[email protected]>
Newsgroups gmane.comp.web.spip.devel
Message-ID <[email protected]>
bonjour Gilles,

il s'agit de vérifier la présence dans $req_ext d'au moins un caractère
appartenant à l'ensemble  [ . * _ a-z A-Z 0-9 ]
/w étant la classe (word) des caractères [a-zA-Z_0-9]
Si un caractère de $req_ext ne se trouve pas dans cet ensemble, alors
$ext prend la valeur contenue dans $req_ext sinon il prend la valeur php
Précédemment ce contrôle était effectué sur la classe de caractère \w
seule, la modification a ajouté à ce contrôle les deux caractères . et *

Cdt,
PhL

Le 18/02/2016 21:36, Gilles Vincent a écrit :
> Salut,
>
> je comprends mal le fonctionnement d'une expression régulière.
> Elle se situe dans ecire/exec/valider.xml
> $ext = !preg_match('*/^[.*\w]+$*/', $req_ext) ? 'php' : $req_ext;
>
> Son origine est le changement 15957
>
> Index: branches/spip-2.1/ecrire/exec/valider_xml.php
> ===================================================================
> --- branches/spip-2.1/ecrire/exec/valider_xml.php    (revision 15956)
> +++ branches/spip-2.1/ecrire/exec/valider_xml.php    (revision 15957)
> @@ -48,16 +48,20 @@
>  
>          if (is_dir($url)) {
>              $dir = (substr($url,-1,1) === '/') ? $url : "$url/";
> -            $ext = !preg_match('*/^\w+$/*', $req_ext) ? 'php' : $req_ext;
> -            $files = preg_files($dir,  $ext . '$', $limit, $rec);
> +            $ext = !preg_match('*/^[.*\w]+$/*', $req_ext) ? 'php' :
> $req_ext;
> +            $files = preg_files($dir,  "$ext$", $limit, $rec);
>              if (!$files AND $ext!=='html') {
>                  $ext = 'html';
>                  $files = preg_files($dir, "$ext$", $limit, $rec);
>              }
> -            if ($files)
> -                $res = valider_dir($files, $ext, $url);
> -            else $res = _T('texte_vide');
> -            $bandeau = $dir . '*' . $ext;
> +            if ($files) {
> +                list($err, $res) = valider_dir($files, $ext, $url);
> +                $err = ' (' . $err . '/' . count($files) .')';
> +            } else {
> +                $res = _T('texte_vide');
> +                $err = '';
> +            }
> +            $bandeau = $dir . '*' . $ext . $err;
>          } else {
>              if (preg_match('/^([^?]*)[?]([0-9a-z_]+)=(.*)$/', $url,
> $r)) {
>                  list(,$server, $dir, $script) = $r;
> @@ -107,7 +111,7 @@
>
> Avant, je comprends que ça validait le fait que _request('ext') ne
> contienne que des caractères de type "mot" (a-z0-9_).
> Mais depuis ce commit, je ne vois pas quelle restriction existe sur ce
> paramètre (sauf le fait qu'il ne contienne pas de retour à la ligne).
> Le commentaire du commit ("pouvoir filtrer les fichiers d'un
> répertoire plus finement que par l'extension") ne me permet pas de
> comprendre les enjeux qui se situent derrière.
>
> Vu que $ext sert dans preg_files() à construire une expression
> régulière "sensible", ne pourrait-on pas revenir à la forme précédente ?
>
>
> .Gilles
>
>
> _______________________________________________
> liste: http://listes.rezo.net/mailman/listinfo/spip-dev
> doc: http://www.spip.net/
> dev: http://trac.rezo.net/trac/spip/
> irc://irc.freenode.net/spip
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.