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

Bug#683670: unblock: spip/2.1.17-1



Package: release.debian.org
Severity: normal
User: release.debian.org@packages.debian.org
Usertags: unblock

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Please unblock package spip, it's a minor upstream update that fixes a
security issue [1] and a few bugs [2,3,4].

  1: http://core.spip.org/projects/spip/repository/revisions/19753
  2: http://core.spip.org/projects/spip/repository/revisions/19693
  3: http://core.spip.org/projects/spip/repository/revisions/19759
  4: http://core.spip.org/projects/spip/repository/revisions/19767

Full debdiff attached, thanks in advance.

unblock spip/2.1.17-1

- -- System Information:
Debian Release: wheezy/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (1, 'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.2.0-3-amd64 (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

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.12 (GNU/Linux)

iQIcBAEBCAAGBQJQGrMZAAoJELgqIXr9/gnyhskP/0YI62uGhHQ2afJDOgAzwGVc
+DhO9zJsHLr0oGE83JvuqYiEa5guEtwxHA7D+bwb82VExHJqDG7Pqv9GHiEOHAxo
wV2SuTgzyVcKrFMQuDATaq2S9c6/x6T6BLexbiX6SU4gbJ6df7++qXcxb8jxJdL1
v0g0oeKx/jah5/HBJ4OVnIm9HZdG8O0UBUDs8OGSRtK/vKUMPmq099wGraSQreFD
PFycG5wpPSoRTS1B/0uLFtGGmOJBubibIGhpu9KlO8ACVPZaSlD6jG3CrAo+GwKH
ij0I9EEMti5JY/5T+odf20UGsa4qvkT6Vg6Llqr87c5+bHJJeUhMPpitnxd27wBj
Gww2cznjfLZ2luCIgd4UmqgK8r+ayW8Ye8BRIFWSY/Xe+D0NS/SZtVA/TJrDkiI3
cTvcX2GDjDq4byaWOugxArNfZtw2M/TZJvSECjRHHE2VBh6ak9EJCCOyd9Zpn0/H
eD5kwKF90oL9jNcbWbkkh+mJFV5NFTY/pU8mUbUelHUGehXSfay+ywuuDWBUGG6u
TdldeVtdH2RfO7g2Zgo+SRk3M75yKbG2oPoT4kixwfTtx4Jq2sv3jDKltnhZdr/b
EinqU7lrbdOeeVQqX+THnr5KQq89+RN1KuEjxkdSITWoeWn9bmiI4snFrJ6iC4Va
yEcTFg1OkcWCrZYlIrgd
=GdZM
-----END PGP SIGNATURE-----
diffstat for spip-2.1.16 spip-2.1.17

 debian/changelog                                         |    6 +
 debian/patches/fix_displayed_version.patch               |    4 
 ecrire/base/connect_sql.php                              |   69 +++++++++++++++
 ecrire/inc/ajouter_documents.php                         |    2 
 ecrire/inc/lien.php                                      |    8 +
 ecrire/inc/texte.php                                     |   58 ++++++------
 ecrire/inc_version.php                                   |    2 
 ecrire/public/balises.php                                |    4 
 ecrire/req/mysql.php                                     |   10 +-
 ecrire/req/sqlite_generique.php                          |   22 +---
 extensions/porte_plume/javascript/jquery.previsu_spip.js |    4 
 extensions/porte_plume/plugin.xml                        |    2 
 svn.revision                                             |   12 +-
 13 files changed, 145 insertions(+), 58 deletions(-)

diff -Nru spip-2.1.16/debian/changelog spip-2.1.17/debian/changelog
--- spip-2.1.16/debian/changelog	2012-07-04 08:46:23.000000000 -0400
+++ spip-2.1.17/debian/changelog	2012-08-02 12:35:20.000000000 -0400
@@ -1,3 +1,9 @@
+spip (2.1.17-1) unstable; urgency=low
+
+  * New upstream version, fixes base disclosure (Closes: #683667).
+
+ -- David Prévot <taffit@debian.org>  Thu, 02 Aug 2012 12:34:29 -0400
+
 spip (2.1.16-1) unstable; urgency=high
 
   * New upstream version:
diff -Nru spip-2.1.16/debian/patches/fix_displayed_version.patch spip-2.1.17/debian/patches/fix_displayed_version.patch
--- spip-2.1.16/debian/patches/fix_displayed_version.patch	2012-07-04 08:30:47.000000000 -0400
+++ spip-2.1.17/debian/patches/fix_displayed_version.patch	2012-08-02 11:41:11.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-07-04
+Last-Update: 2012-08-02
 --- 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.16-1 (Debian)";
++$spip_version_affichee = "2.1.17-1 (Debian)";
  
  // ** Securite **
  $visiteur_session = $auteur_session = $connect_statut = $connect_toutes_rubriques =  $hash_recherche = $hash_recherche_strict = $ldap_present ='';
diff -Nru spip-2.1.16/ecrire/base/connect_sql.php spip-2.1.17/ecrire/base/connect_sql.php
--- spip-2.1.16/ecrire/base/connect_sql.php	2012-07-03 11:31:38.000000000 -0400
+++ spip-2.1.17/ecrire/base/connect_sql.php	2012-08-01 15:30:59.000000000 -0400
@@ -343,6 +343,75 @@
 	return '';
 }
 
+/**
+ * Echapper les textes entre ' ' ou " " d'une requete SQL
+ * avant son pre-traitement
+ * On renvoi la query sans textes et les textes separes, dans
+ * leur ordre d'apparition dans la query
+ *
+ * @param string $query
+ * @return array
+ */
+function query_echappe_textes($query){
+	static $codeEchappements = array("''"=>"\x1@##@\x1", "\'"=>"\x2@##@\x2", "\\\""=>"\x3@##@\x3");
+	$query = str_replace(array_keys($codeEchappements), array_values($codeEchappements), $query);
+	if (preg_match_all("/((['])[^']*(\\2))|(([\"])[^\"]*(\\5))/S",$query,$textes)){
+		$textes = reset($textes); // indice 0 du match
+		switch(count($textes)){
+			case 0:$replace=array();break;
+			case 1:$replace=array('%1$s');break;
+			case 2:$replace=array('%1$s','%2$s');break;
+			case 3:$replace=array('%1$s','%2$s','%3$s');break;
+			case 4:$replace=array('%1$s','%2$s','%3$s','%4$s');break;
+			case 5:$replace=array('%1$s','%2$s','%3$s','%4$s','%5$s');break;
+			default:
+				$replace = range(1,count($textes));
+				$replace = '%'.implode('$s,%',$replace).'$s';
+				$replace = explode(',',$replace);
+				break;
+		}
+		$query = str_replace($textes,$replace,$query);
+	}
+	else
+		$textes = array();
+
+	return array($query, $textes);
+}
+
+/**
+ * Reinjecter les textes d'une requete SQL a leur place initiale,
+ * apres traitement de la requete
+ *
+ * @param string $query
+ * @param array $textes
+ * @return string
+ */
+function query_reinjecte_textes($query, $textes){
+	static $codeEchappements = array("''"=>"\x1@##@\x1", "\'"=>"\x2@##@\x2", "\\\""=>"\x3@##@\x3");
+	# debug de la substitution
+	#if (($c1=substr_count($query,"%"))!=($c2=count($textes))){
+	#	spip_log("$c1 ::". $query,"tradquery"._LOG_ERREUR);
+	#	spip_log("$c2 ::". var_export($textes,1),"tradquery"._LOG_ERREUR);
+	#	spip_log("ini ::". $qi,"tradquery"._LOG_ERREUR);
+	#}
+	switch (count($textes)){
+		case 0:break;
+		case 1:$query=sprintf($query,$textes[0]);break;
+		case 2:$query=sprintf($query,$textes[0],$textes[1]);break;
+		case 3:$query=sprintf($query,$textes[0],$textes[1],$textes[2]);break;
+		case 4:$query=sprintf($query,$textes[0],$textes[1],$textes[2],$textes[3]);break;
+		case 5:$query=sprintf($query,$textes[0],$textes[1],$textes[2],$textes[3],$textes[4]);break;
+		default:
+			array_unshift($textes,$query);
+			$query = call_user_func_array('sprintf',$textes);
+			break;
+	}
+
+	$query = str_replace(array_values($codeEchappements), array_keys($codeEchappements), $query);
+
+	return $query;
+}
+
 // Pour compatibilite. Ne plus utiliser.
 // http://doc.spip.org/@spip_query
 function spip_query($query, $serveur='') {
diff -Nru spip-2.1.16/ecrire/inc/ajouter_documents.php spip-2.1.17/ecrire/inc/ajouter_documents.php
--- spip-2.1.16/ecrire/inc/ajouter_documents.php	2012-07-03 11:31:38.000000000 -0400
+++ spip-2.1.17/ecrire/inc/ajouter_documents.php	2012-08-01 15:30:59.000000000 -0400
@@ -469,6 +469,8 @@
 		return 'jpg';
 	case 'tiff':
 		return 'tif';
+	case 'aif':
+		return 'aiff';
 	case 'mpeg':
 		return 'mpg';
 	default:
diff -Nru spip-2.1.16/ecrire/inc/lien.php spip-2.1.17/ecrire/inc/lien.php
--- spip-2.1.16/ecrire/inc/lien.php	2012-07-03 11:31:38.000000000 -0400
+++ spip-2.1.17/ecrire/inc/lien.php	2012-08-01 15:30:59.000000000 -0400
@@ -68,7 +68,10 @@
 
 	$lang = ($hlang ? " hreflang='$hlang'" : '');
 
-	if ($title) $title = ' title="'.texte_backend($title).'"';
+	if ($title)
+		$title = ' title="'.texte_backend($title).'"';
+	else
+		$title = ''; // $title peut etre 'false'
 
 	// rel=external pour les liens externes
 	if (preg_match(',^https?://,S', $lien)
@@ -174,7 +177,7 @@
 // http://doc.spip.org/@traiter_raccourci_lien_atts
 function traiter_raccourci_lien_atts($texte) {
 
-	$bulle = $hlang = '';
+	$bulle = $hlang = false;
 	// title et hreflang donnes par le raccourci ?
 	if (preg_match(_RACCOURCI_ATTRIBUTS, $texte, $m)) {
 
@@ -551,6 +554,7 @@
 			$gloss = $m[1] ? ('#' . $m[1]) : '';
 			$t = $r[1] . $r[2] . $r[5];
 			list($t, $bulle, $hlang) = traiter_raccourci_lien_atts($t);
+			if ($bulle===false) $bulle = $m[1];
 			$t = unicode2charset(charset2unicode($t), 'utf-8');
 			$ref = $lien("glose$_n$gloss", $t, 'spip_glossaire', $bulle, $hlang);
 			$texte = str_replace($regs[0], $ref, $texte);
diff -Nru spip-2.1.16/ecrire/inc/texte.php spip-2.1.17/ecrire/inc/texte.php
--- spip-2.1.16/ecrire/inc/texte.php	2012-07-03 11:31:38.000000000 -0400
+++ spip-2.1.17/ecrire/inc/texte.php	2012-08-01 15:30:59.000000000 -0400
@@ -576,7 +576,9 @@
 // Tableaux
 //
 
+define('_RACCOURCI_CAPTION', ',^\|\|([^|]*)(\|(.*))?$,sS');
 define('_RACCOURCI_TH_SPAN', '\s*(?:{{[^{}]+}}\s*)?|<');
+define('_RACCOURCI_THEAD', true);
 
 // http://doc.spip.org/@traiter_tableau
 function traiter_tableau($bloc) {
@@ -595,19 +597,17 @@
 		$l ++;
 
 		// Gestion de la premiere ligne :
-		if ($l == 1) {
+		if (($l == 1) AND preg_match(_RACCOURCI_CAPTION, rtrim($ligne,'|'), $cap)) {
 		// - <caption> et summary dans la premiere ligne :
 		//   || caption | summary || (|summary est optionnel)
-			if (preg_match(',^\|\|([^|]*)(\|(.*))?$,sS', rtrim($ligne,'|'), $cap)) {
-				$l = 0;
-				if ($caption = trim($cap[1]))
-					$debut_table .= "<caption>".$caption."</caption>\n";
+			$l = 0;
+			if ($caption = trim($cap[1]))
+				$debut_table .= "<caption>".$caption."</caption>\n";
 				$summary = ' summary="'.entites_html(trim($cap[3])).'"';
-			}
-		// - <thead> sous la forme |{{titre}}|{{titre}}|
-		//   Attention thead oblige a avoir tbody
-			else if (preg_match($reg_line1,	$ligne)) {
-			  	preg_match_all('/\|([^|]*)/S', $ligne, $cols);
+		} else {
+		// - <th> sous la forme |{{titre}}|{{titre}}|
+			if (preg_match($reg_line1, $ligne)) {
+				preg_match_all('/\|([^|]*)/S', $ligne, $cols);
 				$ligne='';$cols= $cols[1];
 				$colspan=1;
 				for($c=count($cols)-1; $c>=0; $c--) {
@@ -615,7 +615,7 @@
 					if($cols[$c]=='<') {
 					  $colspan++;
 					} else {
-					  if($colspan>1) {
+					  if ($colspan>1) {
 						$attr= " colspan='$colspan'";
 						$colspan=1;
 					  }
@@ -624,15 +624,9 @@
 					  $ligne= "<th scope='col'$attr>$cols[$c]</th>$ligne";
 					}
 				}
-
-				$debut_table .= "<thead><tr class='row_first'>".
-					$ligne."</tr></thead>\n";
-				$l = 0;
-			}
-		}
-
-		// Sinon ligne normale
-		if ($l) {
+				$lignes[] = $ligne;
+		  } else {
+			// Sinon ligne normale
 			// Gerer les listes a puce dans les cellules
 			if (strpos($ligne,"\n-*")!==false OR strpos($ligne,"\n-#")!==false)
 				$ligne = traiter_listes($ligne);
@@ -643,6 +637,7 @@
 			// tout mettre dans un tableau 2d
 			preg_match_all('/\|([^|]*)/S', $ligne, $cols);
 			$lignes[]= $cols[1];
+			}
 		}
 	}
 
@@ -660,6 +655,7 @@
 	  $align = true;
 	  for ($j=0;$j<$k;$j++) $rowspans[$j][$i] = 1;
 	  for ($j=0;$j<$k;$j++) {
+	    if (!is_array($lignes[$j])) continue; // cas du th
 	    $cell = trim($lignes[$j][$i]);
 	    if (preg_match($reg_line_all, $cell)) {
 		if (!preg_match('/^\d+([.,]?)\d*$/', $cell, $r))
@@ -676,10 +672,14 @@
 
 	for($l=count($lignes)-1; $l>=0; $l--) {
 		$cols= $lignes[$l];
-		$colspan=1;
-		$ligne='';
-
-		for($c=count($cols)-1; $c>=0; $c--) {
+		if (!is_array($cols)) {
+		  $class = 'first';
+		  $ligne = $cols;
+		} else {
+		  $ligne='';
+		  $colspan=1;
+		  $class = alterner($l+1, 'even', 'odd');
+		  for($c=count($cols)-1; $c>=0; $c--) {
 			$attr= $numeric[$c];
 			$cell = trim($cols[$c]);
 			if($cell=='<') {
@@ -698,17 +698,17 @@
 			  }
 			  $ligne= "\n<td".$attr.'>'.$cols[$c].'</td>'.$ligne;
 			}
+		  }
 		}
-
-		// ligne complete
-		$class = alterner($l+1, 'even', 'odd');
 		$html = "<tr class='row_$class'>$ligne</tr>\n$html";
 	}
+	if (_RACCOURCI_THEAD
+	AND preg_match("@^(<tr class='row_first'.*?</tr>)(.*)$@s", $html, $m))
+		$html = "<thead>$m[1]</thead>\n<tbody>$m[2]</tbody>\n";
+
 	return "\n\n<table".$GLOBALS['class_spip_plus'].$summary.">\n"
 		. $debut_table
-		. "<tbody>\n"
 		. $html
-		. "</tbody>\n"
 		. "</table>\n\n";
 }
 
diff -Nru spip-2.1.16/ecrire/inc_version.php spip-2.1.17/ecrire/inc_version.php
--- spip-2.1.16/ecrire/inc_version.php	2012-07-03 11:31:38.000000000 -0400
+++ spip-2.1.17/ecrire/inc_version.php	2012-08-01 15:31:00.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.16";
+$spip_version_branche = "2.1.17";
 // 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.16/ecrire/public/balises.php spip-2.1.17/ecrire/public/balises.php
--- spip-2.1.16/ecrire/public/balises.php	2012-07-03 11:31:38.000000000 -0400
+++ spip-2.1.17/ecrire/public/balises.php	2012-08-01 15:31:00.000000000 -0400
@@ -589,8 +589,8 @@
 		';
 	// pas de calculs superflus si le site est monolingue
 	$lang = strpos($GLOBALS['meta']['langues_utilisees'], ',');
-
-	switch (!$p->id_boucle? '' : $p->boucles[$p->id_boucle]->type_requete) {
+	$idb = $p->id_boucle;
+	switch (!isset($p->boucle[$idb])? '' : $p->boucles[$idb]->type_requete) {
 		case 'articles':
 			$c = '"id_article=".' . champ_sql('id_article', $p);
 			if ($lang) $lang = champ_sql('lang', $p);
diff -Nru spip-2.1.16/ecrire/req/mysql.php spip-2.1.17/ecrire/req/mysql.php
--- spip-2.1.16/ecrire/req/mysql.php	2012-07-03 11:31:37.000000000 -0400
+++ spip-2.1.17/ecrire/req/mysql.php	2012-08-01 15:30:57.000000000 -0400
@@ -291,8 +291,14 @@
 	} else {
 		$suite = strstr($query, $regs[0]);
 		$query = substr($query, 0, -strlen($suite));
-		if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r)) {
-		  $suite = $r[1] . traite_query($r[2], $db, $prefixe);
+		// propager le prefixe en cas de requete imbriquee
+		// il faut alors echapper les chaine avant de le faire, pour ne pas risquer de
+		// modifier une requete qui est en fait juste du texte dans un champ
+		if (stripos($suite,"SELECT")!==false) {
+			list($suite,$textes) = query_echappe_textes($suite);
+			if (preg_match('/^(.*?)([(]\s*SELECT\b.*)$/si', $suite, $r))
+		    $suite = $r[1] . traite_query($r[2], $db, $prefixe);
+			$suite = query_reinjecte_textes($suite, $textes);
 		}
 	}
 	$r = preg_replace(_SQL_PREFIXE_TABLE, '\1'.$pref, $query) . $suite;
diff -Nru spip-2.1.16/ecrire/req/sqlite_generique.php spip-2.1.17/ecrire/req/sqlite_generique.php
--- spip-2.1.16/ecrire/req/sqlite_generique.php	2012-07-03 11:31:37.000000000 -0400
+++ spip-2.1.17/ecrire/req/sqlite_generique.php	2012-08-01 15:30:57.000000000 -0400
@@ -1666,7 +1666,6 @@
 	
 	// Pour les corrections a effectuer sur les requetes :
 	var $textes = array(); 	// array(code=>'texte') trouvé
-	var $codeEchappements = "%@##@%";
 	
 	
 	// constructeur
@@ -1749,16 +1748,13 @@
 	// enleve les textes, transforme la requete pour quelle soit
 	// bien interpretee par sqlite, puis remet les textes
 	// la fonction affecte $this->query
-// http://doc.spip.org/@traduire_requete
+	// http://doc.spip.org/@traduire_requete
 	function traduire_requete(){
 		//
 		// 1) Protection des textes en les remplacant par des codes
 		//
-		// enlever les echappements ''
-		$this->query = str_replace("''", $this->codeEchappements, $this->query);
-		// enlever les 'textes'
-		$this->textes = array(); // vider 
-		$this->query = preg_replace_callback("/('[^']*')/", array(&$this, '_remplacerTexteParCode'), $this->query);
+		// enlever les 'textes' et initialiser avec
+		list($this->query, $textes) = query_echappe_textes($this->query);
 		
 		//
 		// 2) Corrections de la requete
@@ -1859,12 +1855,12 @@
 		//
 		// 3) Remise en place des textes d'origine
 		//
-		// remettre les 'textes'
-		foreach ($this->textes as $cle=>$val){
-			$this->query = str_replace($cle, $val, $this->query);
-		}
-		// remettre les echappements ''
-		$this->query = str_replace($this->codeEchappements,"''",$this->query);
+		// Correction Antiquotes et echappements
+		// ` => rien
+		if (strpos($this->query,'`')!==false)
+			$this->query = str_replace('`','', $this->query);
+
+		$this->query = query_reinjecte_textes($this->query, $textes);
 	}
 	
 
diff -Nru spip-2.1.16/extensions/porte_plume/javascript/jquery.previsu_spip.js spip-2.1.17/extensions/porte_plume/javascript/jquery.previsu_spip.js
--- spip-2.1.16/extensions/porte_plume/javascript/jquery.previsu_spip.js	2012-07-03 14:38:48.000000000 -0400
+++ spip-2.1.17/extensions/porte_plume/javascript/jquery.previsu_spip.js	2012-08-01 16:31:56.000000000 -0400
@@ -48,6 +48,10 @@
 							objet[1])
 						)
 						.removeClass('ajaxLoad');
+					
+					//ouvre un nouvel onglet lorsqu'on clique sur un lien dans la prévisualisation
+					$(".markItUpPreview a").attr("target","blank");
+
 					return false;
 				});
 				$('.previsuEditer').click(function(){
diff -Nru spip-2.1.16/extensions/porte_plume/plugin.xml spip-2.1.17/extensions/porte_plume/plugin.xml
--- spip-2.1.16/extensions/porte_plume/plugin.xml	2012-07-03 14:38:48.000000000 -0400
+++ spip-2.1.17/extensions/porte_plume/plugin.xml	2012-08-01 16:31:56.000000000 -0400
@@ -10,7 +10,7 @@
 	</slogan>
 	<auteur>Matthieu Marcillaud</auteur>
 	<licence>GNU/GPL</licence>
-	<version>1.7.8</version>
+	<version>1.7.9</version>
 	<description>
 	<multi>
 	[fr]Porte plume est une barre d'outil extensible pour SPIP qui
diff -Nru spip-2.1.16/svn.revision spip-2.1.17/svn.revision
--- spip-2.1.16/svn.revision	2012-07-03 11:11:27.000000000 -0400
+++ spip-2.1.17/svn.revision	2012-08-01 14:51:34.000000000 -0400
@@ -1,10 +1,10 @@
 <svn_revision>
 <text_version>
-Origine: svn://trac.rezo.net/spip/tags/spip-2.1.16
-Revision: 19678
-Dernier commit: 2012-07-03 17:11:27 +0200 
+Origine: svn://trac.rezo.net/spip/tags/spip-2.1.17
+Revision: 19782
+Dernier commit: 2012-08-01 20:51:34 +0200 
 </text_version>
-<origine>svn://trac.rezo.net/spip/tags/spip-2.1.16</origine>
-<revision>19678</revision>
-<commit>2012-07-03 17:11:27 +0200 </commit>
+<origine>svn://trac.rezo.net/spip/tags/spip-2.1.17</origine>
+<revision>19782</revision>
+<commit>2012-08-01 20:51:34 +0200 </commit>
 </svn_revision>
\ Pas de fin de ligne à la fin du fichier

Reply to: