diff --git a/action/copier_local.php b/action/copier_local.php
index 5715ac933d1dd4d4824710c1bcc2e98479a27425..a0feac6c31479f1ef912b8fd2e8cf94f92a40a1a 100644
--- a/action/copier_local.php
+++ b/action/copier_local.php
@@ -59,12 +59,13 @@ function action_copier_local_post($id_document) {
 
 	// si la source est bien un fichier distant
 	// sinon c'est une donnee moisie, on ne fait rien
-	if (tester_url_absolue($source)) {
-		include_spip('inc/distant'); // pour 'copie_locale'
+	include_spip('inc/distant');
+	if (tester_url_absolue($source)
+		and valider_url_distante($source)) {
 		$fichier = copie_locale($source);
 		if (
 			$fichier
-			and tester_url_absolue($source)
+			and valider_url_distante($source)
 		) {
 			$fichier = _DIR_RACINE . $fichier;
 			$files = [];
@@ -86,6 +87,9 @@ function action_copier_local_post($id_document) {
 			return true;
 		} else {
 			spip_log("echec copie locale $source", 'medias' . _LOG_ERREUR);
+			if ($fichier) {
+				@unlink(_DIR_RACINE . $fichier);
+			}
 		}
 	} else {
 		spip_log("echec copie locale $source n'est pas une URL distante", 'medias' . _LOG_ERREUR);