From eb59cba1d351c257e79dc0f37454edde84cb6002 Mon Sep 17 00:00:00 2001
From: Fil <fil@rezo.net>
Date: Fri, 22 May 2009 15:28:30 +0000
Subject: [PATCH] lisibilite de la fonction 'chargement direct d'un fichier
 distant sur le disque dur', et verifier que le chemin fait plus de 5
 caracteres, histoire de ne pas risquer de probleme avec une ecriture genre
 'true' mais cette fonction meriterait une vraie API capable d'aller utiliser
 curl si present ; les devs de laconica se posent la meme question...

---
 ecrire/inc/distant.php | 31 ++++++++++++++++++++-----------
 1 file changed, 20 insertions(+), 11 deletions(-)

diff --git a/ecrire/inc/distant.php b/ecrire/inc/distant.php
index ad3c94184e..5219f261b3 100644
--- a/ecrire/inc/distant.php
+++ b/ecrire/inc/distant.php
@@ -155,15 +155,21 @@ function prepare_donnees_post($donnees, $boundary = '') {
 // et refuser_gz pour forcer le refus de la compression (cas des serveurs orthographiques)
 // date_verif, un timestamp unix pour arreter la recuperation si la page distante n'a pas ete modifiee depuis une date donnee
 // uri_referer, preciser un referer different
-// si munge_charset est une chaine, alors c'est un nom de fichier
-// dans lequel on ecrit directement la page
+// Le second argument ($trans) :
+// * si c'est une chaine longue, alors c'est un nom de fichier
+//   dans lequel on ecrit directement la page
+// * si c'est true/null ca correspond a une demande d'encodage/charset
 // http://doc.spip.org/@recuperer_page
-function recuperer_page($url, $munge_charset=false, $get_headers=false,
+function recuperer_page($url, $trans=false, $get_headers=false,
 	$taille_max = null, $datas='', $boundary='', $refuser_gz = false,
 	$date_verif = '', $uri_referer = '') {
 	$gz = false;
+
+	// $copy = copier le fichier ?
+	$copy = (is_string($trans) AND strlen($trans) > 5); // eviter "false" :-)
+
 	if (is_null($taille_max))
-		$taille_max = is_string($munge_charset)?_COPIE_LOCALE_MAX_SIZE:1048576;
+		$taille_max = $copy ? _COPIE_LOCALE_MAX_SIZE : 1048576;
 
 	// Accepter les URLs au format feed:// ou qui ont oublie le http://
 	$url = preg_replace(',^feed://,i', 'http://', $url);
@@ -182,7 +188,7 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false,
 
 	// dix tentatives maximum en cas d'entetes 301...
 	for ($i=0;$i<10;$i++) {
-		$url = recuperer_lapage($url, $munge_charset, $get, $taille_max, $datas, $boundary, $refuser_gz, $date_verif, $uri_referer);
+		$url = recuperer_lapage($url, $trans, $get, $taille_max, $datas, $boundary, $refuser_gz, $date_verif, $uri_referer);
 		if (!$url) return false;
 		if (is_array($url)) {
 			list($headers, $result) = $url;
@@ -198,11 +204,14 @@ function recuperer_page($url, $munge_charset=false, $get_headers=false,
 // http://doc.spip.org/@recuperer_lapage
 function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576, $datas='', $boundary='', $refuser_gz = false, $date_verif = '', $uri_referer = '')
 {
-	// si on ecrit directement dans un fichier, 
-	// pour ne pas manipuler en memoire
-	// refuser gz
-	if (is_string($trans) AND $trans)
+	// $copy = copier le fichier ?
+	$copy = (is_string($trans) AND strlen($trans) > 5); // eviter "false" :-)
+
+	// si on ecrit directement dans un fichier, pour ne pas manipuler
+	// en memoire refuser gz
+	if ($copy)
 		$refuser_gz = true;
+
 	// ouvrir la connexion et envoyer la requete et ses en-tetes
 	list($f, $fopen) = init_http($get, $url, $refuser_gz, $uri_referer, $datas);
 	if (!$f) {
@@ -231,7 +240,7 @@ function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576,
 
 #	spip_log("recup  $headers" );
 	if ($trans === NULL) return array($headers, '');
-	$result = recuperer_body($f, $taille_max,is_string($trans)?$trans:'');
+	$result = recuperer_body($f, $taille_max, $copy ? $trans : '');
 	fclose($f);
 	if (!$result) return array($headers, $result);
 
@@ -240,7 +249,7 @@ function recuperer_lapage($url, $trans=false, $get='GET', $taille_max = 1048576,
 		$result = spip_gzinflate_body($result);
 	}
 	// Faut-il l'importer dans notre charset local ?
-	if ($trans===true) {
+	if ($trans === true) {
 		include_spip('inc/charsets');
 		$result = transcoder_page ($result, $headers);
 	}
-- 
GitLab