From 59948ee60425a1c4d5c561fbc661b6a3ad30d2d4 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Fri, 2 Jun 2006 10:34:08 +0000
Subject: [PATCH] =?UTF-8?q?corrections=20sur=20self()=20quand=20&var=5Fx?=
 =?UTF-8?q?=3Da&var=5Fy=3Db=20;=20la=20regexp=20n'en=20=C3=A9liminait=20qu?=
 =?UTF-8?q?'un?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/inc/utils.php      | 14 +++++++++-----
 ecrire/public/balises.php |  1 +
 ecrire/public/debug.php   |  8 ++++----
 3 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/ecrire/inc/utils.php b/ecrire/inc/utils.php
index 505dafae31..f375a9d359 100644
--- a/ecrire/inc/utils.php
+++ b/ecrire/inc/utils.php
@@ -331,11 +331,15 @@ function parametre_url($url, $c, $v=NULL, $sep='&amp;') {
 // pour calcul du nom du fichier cache et autres
 //
 function nettoyer_uri() {
-	return preg_replace(',[?&]$,', '',
-		preg_replace
-		(',([?&])(PHPSESSID|(var_[^=&]*))=[^&]*(&|$),i',
-		'\1',
-		$GLOBALS['REQUEST_URI']));
+	$uri1 = $GLOBALS['REQUEST_URI'];
+	do {
+		$uri = $uri1;
+		$uri1 = preg_replace
+			(',([?&])(PHPSESSID|(var_[^=&]*))=[^&]*(&|$),i',
+			'\1', $uri);
+	} while ($uri<>$uri1);
+
+	return preg_replace(',[?&]$,', '', $uri1);
 }
 
 //
diff --git a/ecrire/public/balises.php b/ecrire/public/balises.php
index 73c89ac422..e6f6387343 100644
--- a/ecrire/public/balises.php
+++ b/ecrire/public/balises.php
@@ -861,6 +861,7 @@ function code_invalideur_forums($p, $code) {
 // Reference a l'URL de la page courante
 // Attention dans un INCLURE() ou une balise dynamique on n'a pas le droit de
 // mettre en cache #SELF car il peut correspondre a une autre page (attaque XSS)
+// (Dans ce cas faire <INCLURE{self=#SELF}> pour differencier les caches.)
 // http://www.spip.net/@self
 function balise_SELF_dist($p) {
 	$p->code = 'quote_amp(self())';
diff --git a/ecrire/public/debug.php b/ecrire/public/debug.php
index 1c44684f44..abdbb4db2c 100644
--- a/ecrire/public/debug.php
+++ b/ecrire/public/debug.php
@@ -338,8 +338,7 @@ function debug_dumpfile ($texte, $fonc, $type) {
 	http_no_cache();
 	lang_select($auteur_session['lang']);
 	$self = str_replace("\\'", '&#39;', self());
-	$self .= ((strpos($self, '?') !== false) ? '&amp;' : '?') . 
-	  'var_mode=debug';
+	$self = parametre_url($self,'var_mode', 'debug');
 	echo _DOCTYPE_ECRIRE,
 	  "<html lang='".$GLOBALS['spip_lang']."' dir='ltr'>\n" .
 	  "<head>\n<title>",
@@ -353,11 +352,12 @@ function debug_dumpfile ($texte, $fonc, $type) {
 	  "\n<div id='spip-debug' style='position: absolute; top: 22px; z-index: 1000;height:97%;left:10px;right:10px;'><div id='spip-boucles'>\n"; 
 
 	if ($var_mode_affiche !== 'validation') {
+		$self = parametre_url($self,'var_mode', 'debug');
 	  foreach ($debug_objets['sourcefile'] as $nom_skel => $sourcefile) {
 		echo "<fieldset><legend>",$sourcefile,"&nbsp;: ";
 		echo "\n<a href='$self&amp;var_mode_objet=$nom_skel&amp;var_mode_affiche=squelette#$nom_skel'>"._T('squelette')."</a>";
-		echo "\n<a href='$self&amp;var_mode=debug&amp;var_mode_objet=$nom_skel&amp;var_mode_affiche=resultat#$nom_skel'>"._T('zbug_resultat')."</a>";
-		echo "\n<a href='$self&amp;var_mode=debug&amp;var_mode_objet=$nom_skel&amp;var_mode_affiche=code#$nom_skel'>"._T('zbug_code')."</a></legend>";
+		echo "\n<a href='$self&amp;var_mode_objet=$nom_skel&amp;var_mode_affiche=resultat#$nom_skel'>"._T('zbug_resultat')."</a>";
+		echo "\n<a href='$self&amp;var_mode_objet=$nom_skel&amp;var_mode_affiche=code#$nom_skel'>"._T('zbug_code')."</a></legend>";
 
 		if (is_array($contexte = $debug_objets['contexte'][$nom_skel]))
 			echo afficher_debug_contexte($contexte);
-- 
GitLab