| 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