que fait cette expression régulièr e ?

Gilles Vincent <[email protected]>
Newsgroups gmane.comp.web.spip.devel
Message-ID <CA+Q4Cmv9ghjay=vBDYTKZyD9tsVhKMK6M42hy3nmN4oNT0J_gA@mail.gmail.com>
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
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.