From aca040eb3d7356831dc6322764d12e780d47ed1f Mon Sep 17 00:00:00 2001
From: "cedric@yterium.com" <>
Date: Sat, 25 Oct 2014 13:25:28 +0000
Subject: [PATCH] Fix http://core.spip.org/issues/2938 : quand on met un zip
 dans tmp/ le memoriser dans la session pour le nettoyer au hit suivant si ce
 n'est pas un $_POST (ie si on a abandonne l'upload/deballage). Au passage on
 met les zip dans un sous dossier tmp/zip/ plutot que directement dans tmp/

---
 inc/joindre_document.php | 12 ++++++++----
 medias_fonctions.php     | 13 +++++++++++++
 paquet.xml               |  2 +-
 3 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/inc/joindre_document.php b/inc/joindre_document.php
index 69d9adb3..347c7c72 100644
--- a/inc/joindre_document.php
+++ b/inc/joindre_document.php
@@ -214,10 +214,14 @@ function joindre_verifier_zip($files){
 		// Est-ce qu'on sait le lire ?
 		include_spip('inc/pclzip');
 		if ($zip
-		 AND $archive = new PclZip($zip)
-		 AND $contenu = joindre_decrire_contenu_zip($archive)
-		 AND rename($zip, $tmp = _DIR_TMP.basename($zip))
-		 ){
+			AND $archive = new PclZip($zip)
+		  AND $contenu = joindre_decrire_contenu_zip($archive)
+			AND $tmp = sous_repertoire(_DIR_TMP,"zip")
+		  AND rename($zip, $tmp = $tmp.basename($zip))
+		  ){
+			$zip_to_clean = (isset($GLOBALS['visiteur_session']['zip_to_clean'])?unserialize($GLOBALS['visiteur_session']['zip_to_clean']):array());
+			$zip_to_clean[] = $tmp;
+			session_set('zip_to_clean',serialize($zip_to_clean));
 		 	$contenu[] = $tmp;
 		 	return $contenu;
 		 }
diff --git a/medias_fonctions.php b/medias_fonctions.php
index 68882443..796ee7ee 100644
--- a/medias_fonctions.php
+++ b/medias_fonctions.php
@@ -20,6 +20,19 @@
 // sécurité
 if (!defined('_ECRIRE_INC_VERSION')) return;
 
+// nettoyer les zip abandonnes par l'utilisateur
+if (isset($GLOBALS['visiteur_session']['zip_to_clean'])
+  AND test_espace_prive()
+  AND $_SERVER['REQUEST_METHOD']!=='POST'){
+	$zip_to_clean = unserialize($GLOBALS['visiteur_session']['zip_to_clean']);
+	if ($zip_to_clean){
+		foreach ($zip_to_clean as $zip){
+			if (@file_exists($zip))
+				@unlink($zip);
+		}
+	}
+	session_set('zip_to_clean');
+}
 
 /**
  * Afficher la puce de statut pour les documents
diff --git a/paquet.xml b/paquet.xml
index 04d34993..0a40b039 100644
--- a/paquet.xml
+++ b/paquet.xml
@@ -1,7 +1,7 @@
 <paquet
 	prefix="medias"
 	categorie="multimedia"
-	version="2.9.12"
+	version="2.9.13"
 	etat="stable"
 	compatibilite="[3.0.0;3.1.*]"
 	logo="prive/themes/spip/images/portfolio-32.png"
-- 
GitLab