From 5dd1e23b33040127cbf4eeb00167385a7edeec59 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Mon, 11 Sep 2006 21:39:05 +0000
Subject: [PATCH] ne pas utiliser htmlspecialchars() sur les urls, mais
 entites_html(), qu'on va d'ailleurs installer dans vider_url(), pour la peine
 (cf.  http://thread.gmane.org/gmane.comp.web.spip.devel/36769/focus=36847 )

---
 ecrire/balise/formulaire_forum.php |  2 +-
 ecrire/exec/auteur_infos.php       |  2 +-
 ecrire/inc/filtres.php             |  7 +++++--
 ecrire/inc/forum_insert.php        |  2 +-
 ecrire/inc/texte.php               |  2 +-
 ecrire/public/composer.php         |  1 -
 ecrire/public/interfaces.php       | 18 +++++++++---------
 7 files changed, 18 insertions(+), 16 deletions(-)

diff --git a/ecrire/balise/formulaire_forum.php b/ecrire/balise/formulaire_forum.php
index 6020d84bd9..c99043b449 100644
--- a/ecrire/balise/formulaire_forum.php
+++ b/ecrire/balise/formulaire_forum.php
@@ -218,7 +218,7 @@ function inclure_previsu($texte,$titre, $email_auteur, $auteur, $url_site, $nom_
 			'email_auteur' => safehtml($email_auteur),
 			'auteur' => safehtml(typo($auteur)),
 			'texte' => safehtml(propre($texte)),
-			'url_site' => htmlspecialchars(vider_url($url_site)),
+			'url_site' => vider_url($url_site),
 			'nom_site_forum' => safehtml(typo($nom_site_forum)),
 			'ajouter_mot' => (is_array($ajouter_mot) ? $ajouter_mot : array($ajouter_mot)),
 			'erreur' => $erreur,
diff --git a/ecrire/exec/auteur_infos.php b/ecrire/exec/auteur_infos.php
index 42789b5d66..e501e16816 100644
--- a/ecrire/exec/auteur_infos.php
+++ b/ecrire/exec/auteur_infos.php
@@ -140,7 +140,7 @@ if (strval($nom)!='') {
 	$auteur['bio'] = corriger_caracteres($bio);
 	$auteur['pgp'] = corriger_caracteres($pgp);
 	$auteur['nom_site'] = corriger_caracteres($nom_site_auteur); // attention mix avec $nom_site_spip ;(
-	$auteur['url_site'] = vider_url($url_site);
+	$auteur['url_site'] = vider_url($url_site, false);
 
 	if ($new_pass) {
 		$htpass = generer_htpass($new_pass);
diff --git a/ecrire/inc/filtres.php b/ecrire/inc/filtres.php
index 4c3845175c..cba65f1ea5 100644
--- a/ecrire/inc/filtres.php
+++ b/ecrire/inc/filtres.php
@@ -403,15 +403,18 @@ function attribut_html($texte) {
 }
 
 // Vider les url nulles comme 'http://' ou 'mailto:'
+// et leur appliquer un htmlspecialchars() + gerer les &amp;
 // http://doc.spip.org/@vider_url
-function vider_url($url) {
+function vider_url($url, $entites = true) {
 	# un message pour abs_url
 	$GLOBALS['mode_abs_url'] = 'url';
 
 	$url = trim($url);
-	if (eregi("^(http:?/?/?|mailto:?)$", $url))
+	if (preg_match(",^(http:?/?/?|mailto:?)$,iS", $url))
 		return '';
 
+	if ($entites) $url = entites_html($url);
+
 	return $url;
 }
 
diff --git a/ecrire/inc/forum_insert.php b/ecrire/inc/forum_insert.php
index ce05307358..8cd0a4f32a 100644
--- a/ecrire/inc/forum_insert.php
+++ b/ecrire/inc/forum_insert.php
@@ -255,7 +255,7 @@ function inc_forum_insert_dist() {
 	else
 		$id_thread = $id_message; # id_thread oblige INSERT puis UPDATE.
 
-	$url_site = vider_url($url_site); # pas de http://
+	$url_site = vider_url($url_site, false); # pas de http://
 	spip_query("UPDATE spip_forum	SET id_parent = $id_forum,	id_rubrique = $id_rubrique,	id_article = $id_article,	id_breve = $id_breve,	id_syndic = $id_syndic,	id_auteur = $id_auteur,	id_thread = $id_thread,	date_heure = NOW(),							titre = ".spip_abstract_quote(corriger_caracteres($titre)).",			texte = ".spip_abstract_quote(corriger_caracteres($texte)).",			nom_site = ".spip_abstract_quote(corriger_caracteres($nom_site_forum)).",	url_site = ".spip_abstract_quote(corriger_caracteres($url_site)).",		auteur = ".spip_abstract_quote(corriger_caracteres($auteur)).",		email_auteur = ".spip_abstract_quote(corriger_caracteres($email_auteur)).",	ip = " . spip_abstract_quote($GLOBALS['ip']) . ",						statut = '$statut'	WHERE id_forum = $id_message");
 
 	// Entrer les mots-cles associes
diff --git a/ecrire/inc/texte.php b/ecrire/inc/texte.php
index e59419f264..23f91ccccc 100644
--- a/ecrire/inc/texte.php
+++ b/ecrire/inc/texte.php
@@ -635,7 +635,7 @@ function calculer_url ($lien, $texte='', $pour='url') {
 
 	if ($pour == 'titre') return $texte;
 
-	$lien = entites_html(vider_url($lien));
+	$lien = vider_url($lien);
 
 	// petites corrections d'URL
 	if (preg_match(",^www\.[^@]+$,S",$lien))
diff --git a/ecrire/public/composer.php b/ecrire/public/composer.php
index c554f10943..0888bb4164 100644
--- a/ecrire/public/composer.php
+++ b/ecrire/public/composer.php
@@ -63,7 +63,6 @@ function public_composer_dist($squelette, $mime_type, $gram, $sourcefile) {
 	}
 
 	// Tester si le compilateur renvoie une erreur
-
 	if (is_array($skel_code))
 		erreur_squelette($skel_code[0], $skel_code[1]);
 	else {
diff --git a/ecrire/public/interfaces.php b/ecrire/public/interfaces.php
index f504613040..a6337f4ab4 100644
--- a/ecrire/public/interfaces.php
+++ b/ecrire/public/interfaces.php
@@ -272,7 +272,7 @@ $table_des_traitements['DATE_NOUVEAUTES'][]= 'vider_date(%s)';
 $table_des_traitements['DATE_REDAC'][]= 'vider_date(%s)';
 $table_des_traitements['DESCRIPTIF'][]= 'propre(%s)';
 $table_des_traitements['LIEN_TITRE'][]= 'typo(%s)';
-$table_des_traitements['LIEN_URL'][]= 'htmlspecialchars(vider_url(%s))';
+$table_des_traitements['LIEN_URL'][]= 'vider_url(%s)';
 $table_des_traitements['MESSAGE'][]= 'propre(%s)';
 $table_des_traitements['NOM_SITE_SPIP'][]= 'typo(%s)';
 $table_des_traitements['NOM_SITE'][]= '%s'; # construire_titre_lien -> typo
@@ -286,16 +286,16 @@ $table_des_traitements['TAGS'][]= '%s';
 $table_des_traitements['TEXTE'][]= 'propre(%s)';
 $table_des_traitements['TITRE'][]= 'typo(%s)';
 $table_des_traitements['TYPE'][]= 'typo(%s)';
-$table_des_traitements['URL_ARTICLE'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_BREVE'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_DOCUMENT'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_FORUM'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_MOT'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_RUBRIQUE'][]= 'htmlspecialchars(vider_url(%s))';
+$table_des_traitements['URL_ARTICLE'][]= 'vider_url(%s)';
+$table_des_traitements['URL_BREVE'][]= 'vider_url(%s)';
+$table_des_traitements['URL_DOCUMENT'][]= 'vider_url(%s)';
+$table_des_traitements['URL_FORUM'][]= 'vider_url(%s)';
+$table_des_traitements['URL_MOT'][]= 'vider_url(%s)';
+$table_des_traitements['URL_RUBRIQUE'][]= 'vider_url(%s)';
 $table_des_traitements['DESCRIPTIF_SITE_SPIP'][]= 'propre(%s)';
 $table_des_traitements['URL_SITE'][]= 'calculer_url(%s)';
-$table_des_traitements['URL_SOURCE'][]= 'htmlspecialchars(vider_url(%s))';
-$table_des_traitements['URL_SYNDIC'][]= 'htmlspecialchars(vider_url(%s))';
+$table_des_traitements['URL_SOURCE'][]= 'vider_url(%s)';
+$table_des_traitements['URL_SYNDIC'][]= 'vider_url(%s)';
 $table_des_traitements['ENV'][]= 'entites_html(%s)';
 
 
-- 
GitLab