[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#680381: unblock: spip/2.1.16-1



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: freeze-exception

Please unblock package spip, it's a minor release that will fix a
security issue, and a few bugs. The attached debdiff is pretty thin:
most of the changes, in the security screen file, are due to rewritten
comments.

unblock spip/2.1.16-1

-- System Information:
Debian Release: 6.0.5
  APT prefers stable-updates
  APT policy: (500, 'stable-updates'), (500, 'proposed-updates'), (500, 'stable'), (150, 'testing'), (120, 'unstable'), (110, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.32-5-686 (SMP w/1 CPU core)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
diff -Nru spip-2.1.15/debian/changelog spip-2.1.16/debian/changelog
--- spip-2.1.15/debian/changelog	2012-06-12 19:17:13.000000000 -0400
+++ spip-2.1.16/debian/changelog	2012-07-04 08:46:23.000000000 -0400
@@ -1,3 +1,13 @@
+spip (2.1.16-1) unstable; urgency=high
+
+  * New upstream version:
+    - fixes PHP injection (Closes: #680118);
+    - fixes growing session directory;
+    - fixes PHP 5.4 compatibility.
+  * Update security screen file to 1.1.3.
+
+ -- David Prévot <taffit@debian.org>  Wed, 04 Jul 2012 08:42:01 -0400
+
 spip (2.1.15-1) unstable; urgency=high
 
   * New upstream version, fixes cross site scripting.
diff -Nru spip-2.1.15/debian/patches/fix_displayed_version.patch spip-2.1.16/debian/patches/fix_displayed_version.patch
--- spip-2.1.15/debian/patches/fix_displayed_version.patch	2012-06-12 17:55:50.000000000 -0400
+++ spip-2.1.16/debian/patches/fix_displayed_version.patch	2012-07-04 08:30:47.000000000 -0400
@@ -2,7 +2,7 @@
  Make it obvious it's a Debian (patched) version
 Forwarded: not-needed
 Author: David Prévot <taffit@debian.org>
-Last-Update: 2012-06-12
+Last-Update: 2012-07-04
 --- a/ecrire/inc_version.php
 +++ b/ecrire/inc_version.php
 @@ -423,7 +423,7 @@
@@ -10,7 +10,7 @@
  // 1.xxyy : xx00 versions stables publiees, xxyy versions de dev
  // (ce qui marche pour yy ne marchera pas forcement sur une version plus ancienne)
 -$spip_version_affichee = "$spip_version_branche";
-+$spip_version_affichee = "2.1.15-1 (Debian)";
++$spip_version_affichee = "2.1.16-1 (Debian)";
  
  // ** Securite **
  $visiteur_session = $auteur_session = $connect_statut = $connect_toutes_rubriques =  $hash_recherche = $hash_recherche_strict = $ldap_present ='';
diff -Nru spip-2.1.15/debian/security/ecran_securite.php spip-2.1.16/debian/security/ecran_securite.php
--- spip-2.1.15/debian/security/ecran_securite.php	2012-06-12 17:06:39.000000000 -0400
+++ spip-2.1.16/debian/security/ecran_securite.php	2012-07-04 08:31:30.000000000 -0400
@@ -5,21 +5,20 @@
  * ------------------
  */
 
-define('_ECRAN_SECURITE', '1.1.2'); // 12 juin  2012
+define('_ECRAN_SECURITE', '1.1.3'); // 3 juillet 2012
 
 /*
  * Documentation : http://www.spip.net/fr_article4200.html
- *
  */
 
 /*
- * test utilisateur
+ * Test utilisateur
  */
 if (isset($_GET['test_ecran_securite']))
 	$ecran_securite_raison = 'test '._ECRAN_SECURITE;
 
 /*
- * detecteur de robot d'indexation
+ * Détecteur de robot d'indexation
  */
 if (!defined('_IS_BOT'))
 	define('_IS_BOT',
@@ -28,10 +27,11 @@
 			(string) $_SERVER['HTTP_USER_AGENT'])
 	);
 
-/*     - interdit de passer une variable id_article (ou id_xxx) qui ne
- *       soit pas numerique (ce qui bloque l'exploitation de divers trous
- *       de securite, dont celui de toutes les versions < 1.8.2f)
- *       (sauf pour id_table, qui n'est pas numerique jusqu'a [5743])
+/*
+ * Interdit de passer une variable id_article (ou id_xxx) qui ne
+ * soit pas numérique (ce qui bloque l'exploitation de divers trous
+ * de sécurité, dont celui de toutes les versions < 1.8.2f)
+ * (sauf pour id_table, qui n'est pas numérique jusqu'à [5743])
  */
 foreach ($_GET as $var => $val)
 	if ($_GET[$var] AND strncmp($var,"id_",3)==0 AND $var!='id_table')
@@ -43,15 +43,14 @@
 	if ($GLOBALS[$var] AND strncmp($var,"id_",3)==0 AND $var!='id_table')
 		$GLOBALS[$var] = is_array($GLOBALS[$var])?@array_map('intval',$GLOBALS[$var]):intval($GLOBALS[$var]);
 
-
-/*     - interdit la variable $cjpeg_command, qui etait utilisee sans
- *       precaution dans certaines versions de dev (1.8b2 -> 1.8b5)
- *
+/*
+ * Interdit la variable $cjpeg_command, qui était utilisée sans
+ * précaution dans certaines versions de dev (1.8b2 -> 1.8b5)
  */
 $cjpeg_command='';
 
-/*     - controle de quelques variables (XSS)
- *
+/*
+ * Contrôle de quelques variables (XSS)
  */
 foreach(array('lang', 'var_recherche', 'aide', 'var_lang_r', 'lang_r', 'var_ajax_ancre') as $var) {
 	if (isset($_GET[$var]))
@@ -60,15 +59,15 @@
 		$_REQUEST[$var] = $GLOBALS[$var] = $_POST[$var] = preg_replace(',[^\w\,/#&;-]+,',' ',(string)$_POST[$var]);
 }
 
-/*     - filtre l'acces a spip_acces_doc (injection SQL en 1.8.2x)
- *
+/*
+ * Filtre l'accès à spip_acces_doc (injection SQL en 1.8.2x)
  */
 if (preg_match(',^(.*/)?spip_acces_doc\.,', (string)$_SERVER['REQUEST_URI'])) {
 	$file = addslashes((string)$_GET['file']);
 }
 
 /*
- *     - agenda joue a l'injection php
+ * Agenda joue à l'injection php
  */
 if (isset($_REQUEST['partie_cal'])
 AND $_REQUEST['partie_cal'] !== htmlentities((string)$_REQUEST['partie_cal']))
@@ -78,7 +77,7 @@
 	$ecran_securite_raison = "echelle";
 
 /*
- *     - espace prive
+ * Espace privé
  */
 if (isset($_REQUEST['exec'])
 AND !preg_match(',^[\w-]+$,', (string)$_REQUEST['exec']))
@@ -107,8 +106,8 @@
 	}
 }
 
-/*     - bloque les requetes contenant %00 (manipulation d'include)
- *
+/*
+ * Bloque les requêtes contenant %00 (manipulation d'include)
  */
 if (strpos(
 	@get_magic_quotes_gpc() ?
@@ -117,22 +116,23 @@
 ) !== false)
 	$ecran_securite_raison = "%00";
 
-/*     - bloque les requetes fond=formulaire_
- *
+/*
+ * Bloque les requêtes fond=formulaire_
  */
 if (isset($_REQUEST['fond'])
 AND preg_match(',^formulaire_,i', $_REQUEST['fond']))
 	$ecran_securite_raison = "fond=formulaire_";
 
-/*     - bloque les requetes du type ?GLOBALS[type_urls]=toto (bug vieux php)
- *
+/*
+ * Bloque les requêtes du type ?GLOBALS[type_urls]=toto (bug vieux php)
  */
 if (isset($_REQUEST['GLOBALS']))
 	$ecran_securite_raison = "GLOBALS[GLOBALS]";
 
-/*     - bloque les requetes des bots sur:
- *       les agenda
- *       les paginations entremelees
+/*
+ * Bloque les requêtes des bots sur:
+ * les agenda
+ * les paginations entremélées
  */
 if (_IS_BOT AND (
 	(isset($_REQUEST['echelle']) AND isset($_REQUEST['partie_cal']) AND isset($_REQUEST['type']))
@@ -162,27 +162,29 @@
 if (isset($_REQUEST[$var]) AND is_array($_REQUEST[$var]))
 	$ecran_securite_raison = "xss ".$var;
 
-/* Parade antivirale contre un cheval de troie */
-if(!function_exists('tmp_lkojfghx')){
-function tmp_lkojfghx(){}
-function tmp_lkojfghx2($a=0,$b=0,$c=0,$d=0){
-	// si jamais on est arrive ici sur une erreur php
-	// et qu'un autre gestionnaire d'erreur est defini, l'appeller
-	if($b&&$GLOBALS['tmp_xhgfjokl'])
-		call_user_func($GLOBALS['tmp_xhgfjokl'],$a,$b,$c,$d);
-}
+/*
+ * Parade antivirale contre un cheval de troie
+ */
+if (!function_exists('tmp_lkojfghx')) {
+	function tmp_lkojfghx() {}
+	function tmp_lkojfghx2($a=0, $b=0, $c=0, $d=0) {
+		// si jamais on est arrivé ici sur une erreur php
+		// et qu'un autre gestionnaire d'erreur est défini, l'appeller
+		if ($b&&$GLOBALS['tmp_xhgfjokl'])
+			call_user_func($GLOBALS['tmp_xhgfjokl'],$a,$b,$c,$d);
+	}
 }
 if (isset($_POST['tmp_lkojfghx3']))
 	$ecran_securite_raison = "gumblar";
 
 /*
- * Outils XML mal securises < 2.0.9
+ * Outils XML mal sécurisés < 2.0.9
  */
 if (isset($_REQUEST['transformer_xml']))
 	$ecran_securite_raison = "transformer_xml";
 
 /*
- * Sauvegarde mal securisee < 2.0.9
+ * Sauvegarde mal securisée < 2.0.9
  */
 if (isset($_REQUEST['nom_sauvegarde'])
 AND strstr((string)$_REQUEST['nom_sauvegarde'], '/'))
@@ -194,14 +196,15 @@
 
 /*
  * op permet des inclusions arbitraires ;
- * on verifie 'page' pour ne pas bloquer ... drupal
+ * on vérifie 'page' pour ne pas bloquer ... drupal
  */
 if (isset($_REQUEST['op']) AND isset($_REQUEST['page'])
 AND $_REQUEST['op'] !== preg_replace('/[^\-\w]/', '', $_REQUEST['op']))
 	$ecran_securite_raison = 'op';
 
-
-/* Forms & Table ne se mefiait pas assez des uploads de fichiers */
+/*
+ * Forms & Table ne se méfiait pas assez des uploads de fichiers
+ */
 if (count($_FILES)){
 	foreach($_FILES as $k=>$v){
 		 if (preg_match(',^fichier_\d+$,',$k)
@@ -210,16 +213,22 @@
 	}
 }
 
-/* reinstall=oui un peu trop permissif */
+/*
+ * reinstall=oui un peu trop permissif
+ */
 if (isset($_REQUEST['reinstall'])
 AND $_REQUEST['reinstall'] == 'oui')
 	$ecran_securite_raison = 'reinstall=oui';
 
-/* echappement xss referer */
+/*
+ * Échappement xss referer
+ */
 if (isset($_SERVER['HTTP_REFERER']))
 	$_SERVER['HTTP_REFERER'] = strtr($_SERVER['HTTP_REFERER'], '<>"\'', '[]##');
 
-/* Reinjection des cles en html dans l'admin r19561 */
+/*
+ * Réinjection des clés en html dans l'admin r19561
+ */
 if (strpos($_SERVER['REQUEST_URI'],"ecrire/")!==false){
 	$zzzz=implode("",array_keys($_REQUEST));
 	if (strlen($zzzz)!=strcspn($zzzz,'<>"\''))
@@ -227,6 +236,21 @@
 }
 
 /*
+ * Injection par connect
+ */
+if (isset($_REQUEST['connect'])
+	AND
+	// cas qui permettent de sortir d'un commentaire PHP
+	(strpos($_REQUEST['connect'], "?".">")!==false
+	 OR strpos($_REQUEST['connect'], "\n")!==false
+	 OR strpos($_REQUEST['connect'], "\r")!==false)
+	) {
+	$_REQUEST['connect'] = str_replace(array("?".">", "\r", "\n"), "", $_REQUEST['connect']);
+	if (isset($_GET['connect'])) $_GET['connect'] = $_REQUEST['connect'];
+	if (isset($_POST['connect'])) $_POST['connect'] = $_REQUEST['connect'];
+}
+
+/*
  * S'il y a une raison de mourir, mourons
  */
 if (isset($ecran_securite_raison)) {
@@ -237,15 +261,15 @@
 	header("Content-Type: text/html");
 	die("<html><title>Error 403: Forbidden</title><body><h1>Error 403</h1><p>You are not authorized to view this page ($ecran_securite_raison)</p></body></html>");
 }
+
 /*
- * Fin securite
+ * Fin sécurité
  */
 
 
 
 /*
- * Bloque les bots quand le load deborde
- *
+ * Bloque les bots quand le load déborde
  */
 if (!defined('_ECRAN_SECURITE_LOAD'))
 	define('_ECRAN_SECURITE_LOAD', 4);
diff -Nru spip-2.1.15/ecrire/base/connect_sql.php spip-2.1.16/ecrire/base/connect_sql.php
--- spip-2.1.15/ecrire/base/connect_sql.php	2012-06-12 10:32:34.000000000 -0400
+++ spip-2.1.16/ecrire/base/connect_sql.php	2012-07-03 11:31:38.000000000 -0400
@@ -60,11 +60,7 @@
 		if (!isset($GLOBALS['db_ok'])) {
 		  // fera mieux la prochaine fois
 			if ($install) return false;
-			if ($f AND $readable)
-				spip_log("spip_connect: fichier de connexion '$f' OK.");
-			else
-				spip_log("spip_connect: fichier de connexion '$f' non trouve");
-			spip_log("spip_connect: echec connexion ou serveur $index mal defini dans '$f'.");
+			spip_log("spip_connect: serveur $index mal defini dans '$f'. spip_connect_version: " . @$GLOBALS['spip_connect_version']);
 			// ne plus reessayer si ce n'est pas l'install
 			return $connexions[$index]=false;
 		}
diff -Nru spip-2.1.15/ecrire/exec/auteurs.php spip-2.1.16/ecrire/exec/auteurs.php
--- spip-2.1.15/ecrire/exec/auteurs.php	2012-06-12 10:32:30.000000000 -0400
+++ spip-2.1.16/ecrire/exec/auteurs.php	2012-07-03 11:31:37.000000000 -0400
@@ -56,7 +56,11 @@
 		  lettres_d_auteurs(requete_auteurs($tri, $statut, $recherche), $debut, MAX_AUTEURS_PAR_PAGE, $tri);
 
 
-		$recherche = auteurs_tranches(afficher_n_auteurs($auteurs), $debut, $lettre, $tri, $statut, MAX_AUTEURS_PAR_PAGE, $nombre_auteurs,$cherche);
+
+		$arg = ($statut ? ("&statut=" .urlencode($statut)) : '')
+		  .  ($cherche ? ("&recherche=" . urlencode($cherche)) : '');
+
+		$recherche = auteurs_tranches(afficher_n_auteurs($auteurs), $debut, $lettre, $tri, $statut, MAX_AUTEURS_PAR_PAGE, $nombre_auteurs, $arg);
 
 		if ($cherche){
 			$cherche = htmlspecialchars($cherche);
@@ -80,7 +84,7 @@
 			$visiteurs ? _T('info_visiteurs') :  _T('info_auteurs'),
 				     "auteurs","redacteurs");
 
-		echo bandeau_auteurs($tri, $visiteurs);
+		echo bandeau_auteurs($visiteurs);
 		
 		echo  $trouve, "<div class='nettoyeur'></div>";
 
@@ -91,9 +95,9 @@
 }
 
 // http://doc.spip.org/@bandeau_auteurs
-function bandeau_auteurs($tri, $visiteurs)
+function bandeau_auteurs($visiteurs)
 {
-	global $connect_id_auteur,   $connect_statut,   $connect_toutes_rubriques;
+	global $connect_id_auteur;
 
 	$ret = debut_gauche("auteurs",true) . debut_boite_info(true);
 
@@ -102,16 +106,16 @@
 	else 
 		$ret .= "\n<p class='arial1'>"._T('info_gauche_auteurs'). '</p>';
 
-	if ($connect_statut == '0minirezo')
+	if (autoriser('voir', 'auteur'))
 		$ret .= "\n<p class='arial1'>". _T('info_gauche_auteurs_exterieurs') . '</p>';
 
 	$ret .= fin_boite_info(true);
 
 	$ret .= pipeline('affiche_gauche',array('args'=>array('exec'=>'auteurs'),'data'=>''));
 
-	if ($connect_statut == '0minirezo') {
+	if (autoriser('voir', 'auteur')) {
 
-		if ($connect_toutes_rubriques) 
+		if (autoriser('creer', 'auteur'))
 			$res = icone_horizontale(_T('icone_creer_nouvel_auteur'), generer_url_ecrire("auteur_infos", 'new=oui'), "auteur-24.gif", "creer.gif", false);
 		else $res = '';
 
@@ -174,13 +178,10 @@
 }
 
 // http://doc.spip.org/@auteurs_tranches
-function auteurs_tranches($auteurs, $debut, $lettre, $tri, $statut, $max_par_page, $nombre_auteurs, $cherche='')
+function auteurs_tranches($auteurs, $debut, $lettre, $tri, $statut, $max_par_page, $nombre_auteurs, $arg='')
 {
 	global $spip_lang_right;
 
-	$arg = ($statut ? ("&statut=" .urlencode($statut)) : '')
-	   .  ($cherche ? ("&recherche=" . urlencode($cherche)) : '');
-
 	$res ="\n<tr class='titrem'>"
 	. "\n<th style='width: 20px'>";
 
@@ -292,37 +293,40 @@
 // http://doc.spip.org/@requete_auteurs
 function requete_auteurs($tri, $statut, $recherche=NULL)
 {
-	global $connect_statut, $spip_lang, $connect_id_auteur;
+	global $connect_id_auteur;
 
-	//
-	// Construire la requete
-	//
-	
 	// si on n'est pas minirezo, ignorer les auteurs sans article
 	// sauf les admins, toujours visibles.
 
 	// limiter les statuts affiches
-	if ($connect_statut == '0minirezo') {
+	if (autoriser('voir', 'auteur')) {
 		if ($statut[0]=='!') {
 			  $statut = substr($statut,1); $not = "NOT";
 		} else $not = '';
 		$visit = !statut_min_redac($statut);
 		$statut = preg_split('/\W+/', $statut); 
-		$sql_visible = sql_in("aut.statut", $statut, $not);
+		$where = sql_in("aut.statut", $statut, $not);
 	} else {
-		$sql_visible = "(
+		$where = "(
 			aut.statut = '0minirezo'
 			OR aut.id_auteur=$connect_id_auteur
 			OR " . sql_in('art.statut', array('prop', 'publie'))
 		. ')';
 		$visit = false;
 	}
+	if ($recherche) $where .= " AND $recherche" ;
+	return requete_auteurs_tri($tri, $where, $visit);
+}
+
+function requete_auteurs_tri($tri, $where, $visit=false)
+{
+	global $spip_lang;
 
 	$sql_sel = '';
 	$join = $visit ?
 	 ""
 	 : 
-	 (strpos($sql_visible,'art.statut')?("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur" . " LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)"):"");
+	 (strpos($where,'art.statut')?("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur" . " LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)"):"");
 	
 	// tri
 	switch ($tri) {
@@ -332,7 +336,7 @@
 		$join = $visit ?
 		 "LEFT JOIN spip_forum AS lien ON aut.id_auteur=lien.id_auteur"
 		 : ("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur" 
-		. (strpos($sql_visible,'art.statut')?" LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)":""));
+		. (strpos($where,'art.statut')?" LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)":""));
 		break;
 	
 	case 'site':
@@ -361,9 +365,7 @@
 				"UPPER(aut.nom) AS unom", 
 				$sql_sel),array('',null)),
 		     'FROM' => "spip_auteurs AS aut $join",
-		     'WHERE' => $sql_visible . ($recherche 
-				? " AND $recherche" 
-				: ''),
+		     'WHERE' => $where,
 		     'GROUP BY' => "aut.statut, aut.nom_site, aut.nom, aut.id_auteur", 
 		     'ORDER BY' => $sql_order);
 }
diff -Nru spip-2.1.15/ecrire/inc/autoriser.php spip-2.1.16/ecrire/inc/autoriser.php
--- spip-2.1.15/ecrire/inc/autoriser.php	2012-06-12 10:32:34.000000000 -0400
+++ spip-2.1.16/ecrire/inc/autoriser.php	2012-07-03 11:31:38.000000000 -0400
@@ -356,6 +356,12 @@
 		AND !$qui['restreint'];
 }
 
+function autoriser_auteur_creer_dist($faire, $type, $id, $qui, $opt) {
+	return
+		$qui['statut'] == '0minirezo'
+		AND !$qui['restreint'];
+}
+
 // Autoriser a modifier un groupe de mots $id
 // y compris en ajoutant/modifiant les mots lui appartenant
 // http://doc.spip.org/@autoriser_groupemots_modifier_dist
diff -Nru spip-2.1.15/ecrire/inc/drapeau_edition.php spip-2.1.16/ecrire/inc/drapeau_edition.php
--- spip-2.1.15/ecrire/inc/drapeau_edition.php	2012-06-12 10:32:34.000000000 -0400
+++ spip-2.1.16/ecrire/inc/drapeau_edition.php	2012-07-03 11:31:38.000000000 -0400
@@ -69,7 +69,7 @@
 // http://doc.spip.org/@signale_edition
 function signale_edition ($id, $auteur, $type='article') {
 	$edition = lire_tableau_edition();
-	if ($id_a = $auteur['id_auteur'])
+	if (isset($auteur['id_auteur']) and $id_a = $auteur['id_auteur'])
 		$nom = $auteur['nom'];
 	else
 		$nom = $id_a = $GLOBALS['ip'];
diff -Nru spip-2.1.15/ecrire/inc/lien.php spip-2.1.16/ecrire/inc/lien.php
--- spip-2.1.15/ecrire/inc/lien.php	2012-06-12 10:32:34.000000000 -0400
+++ spip-2.1.16/ecrire/inc/lien.php	2012-07-03 11:31:38.000000000 -0400
@@ -54,7 +54,13 @@
 		$class = "spip_mail";
 	elseif (preg_match('/^<html>/',$texte)) # cf traiter_lien_explicite
 		$class = "spip_url spip_out";
-	elseif (!$class) $class = "spip_out"; # si pas spip_in|spip_glossaire
+	elseif (!$class) {
+	        # spip_out sur les URLs externes
+	        if (preg_match(',^\w+://,iS', $lien)
+	        AND strncasecmp($lien, url_de_base(), strlen(url_de_base()))
+	        )
+                $class = "spip_out"; # si pas spip_in|spip_glossaire
+        }
 
 	// Si l'objet n'est pas de la langue courante, on ajoute hreflang
 	if (!$hlang AND $lang!==$GLOBALS['spip_lang'])
diff -Nru spip-2.1.15/ecrire/inc/session.php spip-2.1.16/ecrire/inc/session.php
--- spip-2.1.15/ecrire/inc/session.php	2012-06-12 10:32:34.000000000 -0400
+++ spip-2.1.16/ecrire/inc/session.php	2012-07-03 11:31:38.000000000 -0400
@@ -103,6 +103,10 @@
 			time() + $duree
 			);
 		spip_log("ajoute session $fichier_session cookie $duree");
+
+		// purger au passage les vieux fichiers de session
+		supprimer_sessions(-1);
+
 		return $_COOKIE['spip_session'];
 	}
 }
@@ -147,7 +151,7 @@
 	$GLOBALS['visiteur_session'] = $sauve;
 
 	// si c'est le meme, rafraichir les valeurs
-	if ($auteur['id_auteur'] == $sauve['id_auteur'])
+	if (isset($sauve['id_auteur']) and $auteur['id_auteur'] == $sauve['id_auteur'])
 		verifier_session();
 }
 
diff -Nru spip-2.1.15/ecrire/inc_version.php spip-2.1.16/ecrire/inc_version.php
--- spip-2.1.15/ecrire/inc_version.php	2012-06-12 10:32:39.000000000 -0400
+++ spip-2.1.16/ecrire/inc_version.php	2012-07-03 11:31:38.000000000 -0400
@@ -410,7 +410,7 @@
 // numero de branche, utilise par les plugins
 // pour specifier les versions de SPIP necessaire
 // il faut s'en tenir a un nombre de decimales fixe ex : 2.0.0, 2.0.0-dev, 2.0.0-beta, 2.0.0-beta2
-$spip_version_branche = "2.1.15";
+$spip_version_branche = "2.1.16";
 // version des signatures de fonctions PHP
 // (= numero SVN de leur derniere modif cassant la compatibilite et/ou necessitant un recalcul des squelettes)
 $spip_version_code = 15375;
diff -Nru spip-2.1.15/ecrire/public/compiler.php spip-2.1.16/ecrire/public/compiler.php
--- spip-2.1.15/ecrire/public/compiler.php	2012-06-12 10:32:39.000000000 -0400
+++ spip-2.1.16/ecrire/public/compiler.php	2012-07-03 11:31:38.000000000 -0400
@@ -969,6 +969,8 @@
 
 	$secondes = spip_timer('calcul_skel');
 	spip_log("COMPIL ($secondes) [$sourcefile] $nom.php");
+	// $connect n'est pas sûr : on nettoie
+	$connect = preg_replace(',[^\w],', '', $connect);
 
 	// Assimiler la fct principale a une boucle anonyme, c'est plus simple
 	$code = new Boucle;
diff -Nru spip-2.1.15/svn.revision spip-2.1.16/svn.revision
--- spip-2.1.15/svn.revision	2012-06-12 09:40:48.000000000 -0400
+++ spip-2.1.16/svn.revision	2012-07-03 11:11:27.000000000 -0400
@@ -1,10 +1,10 @@
 <svn_revision>
 <text_version>
-Origine: svn://trac.rezo.net/spip/tags/spip-2.1.15
-Revision: 19579
-Dernier commit: 2012-06-12 15:40:48 +0200 
+Origine: svn://trac.rezo.net/spip/tags/spip-2.1.16
+Revision: 19678
+Dernier commit: 2012-07-03 17:11:27 +0200 
 </text_version>
-<origine>svn://trac.rezo.net/spip/tags/spip-2.1.15</origine>
-<revision>19579</revision>
-<commit>2012-06-12 15:40:48 +0200 </commit>
+<origine>svn://trac.rezo.net/spip/tags/spip-2.1.16</origine>
+<revision>19678</revision>
+<commit>2012-07-03 17:11:27 +0200 </commit>
 </svn_revision>
\ Pas de fin de ligne à la fin du fichier.

Reply to: