diff --git a/ecrire/base/typedoc.php b/ecrire/base/typedoc.php
index bf53f59014dbb165a8c450135d105b293ddce6a0..d80167909c7ce647de048ce88b9c7257100d7240 100644
--- a/ecrire/base/typedoc.php
+++ b/ecrire/base/typedoc.php
@@ -46,7 +46,8 @@ $tables_sequences = array(
 			  'rm' => 'RealAudio',
 			  'swf' => 'Flash',
 			  'wav' => 'WAV',
-			  'wmv' => 'Windows Media'
+			  'wmv' => 'Windows Media',
+			  'svg' => 'Scalable Vector Graphics'
 			  );
 
 // Documents varies
@@ -115,6 +116,7 @@ $tables_mime = array(
 		'swf'=>'application/x-shockwave-flash',
 		'wav'=>'audio/x-wav',
 		'wmv'=>'video/x-ms-wmv',
+		'svg'=>'image/svg+xml',
 
 		// Documents varies
 		'ai' =>'application/illustrator',
diff --git a/ecrire/base/upgrade.php b/ecrire/base/upgrade.php
index b33a47a839f90785725c5c1e05d2c5d2b2ee26bf..3ff7ea6d7d6a31dc37b2873794e359f000fd8a4c 100644
--- a/ecrire/base/upgrade.php
+++ b/ecrire/base/upgrade.php
@@ -1167,6 +1167,13 @@ function maj_base() {
 		maj_version(1.913);
 	}
 
+	// Ajout de SVG
+	if ($version_installee < 1.914) {
+		spip_query("INSERT IGNORE INTO spip_types_documents (extension, titre, inclus) VALUES ('svg', 'Scalable Vector Graphics', 'embed')");
+		spip_query("UPDATE spip_types_documents	SET mime_type='image/svg+xml' WHERE extension='svg'");
+		maj_version(1.914);
+	}
+
 }
 
 ?>
diff --git a/ecrire/inc/getdocument.php b/ecrire/inc/getdocument.php
index 7f760e4d8dd6db638ebcc77170d1e0ef19dedfe4..2c783c2f7507db3c702bcca07c1cfca319b46f22 100644
--- a/ecrire/inc/getdocument.php
+++ b/ecrire/inc/getdocument.php
@@ -275,45 +275,47 @@ function ajouter_un_document ($source, $nom_envoye, $type_lien, $id_lien, $mode,
 			return;
 		}
 
-		// Quelques infos sur le fichier
-		if (!@file_exists($fichier)
-		OR !$taille = @filesize($fichier)) {
-			spip_log ("Echec copie du fichier $fichier");
-			return;
-		}
-
-		// Si c'est une image, recuperer sa taille et son type (detecte aussi swf)
-		$size_image = @getimagesize($fichier);
-		$largeur = intval($size_image[0]);
-		$hauteur = intval($size_image[1]);
-		$type_image = decoder_type_image($size_image[2]);
-
 		// Prevoir traitement specifique pour videos
 		// (http://www.getid3.org/ peut-etre
 		if ($ext == "mov") {
 			$largeur = 0;
 			$hauteur = 0;
+		} else 	if ($ext == "svg") {
+		  // recuperer les dimensions et supprimer les scripts
+				list($largeur,$hauteur)= traite_svg($fichier);
+		} else {
+		// Si c'est une image, recuperer sa taille et son type (detecte aussi swf)
+			$size_image = @getimagesize($fichier);
+			$largeur = intval($size_image[0]);
+			$hauteur = intval($size_image[1]);
+			$type_image = decoder_type_image($size_image[2]);
+		}
+
+		// Quelques infos sur le fichier
+		if (!@file_exists($fichier)
+		OR !$taille = @filesize($fichier)) {
+			spip_log ("Echec copie du fichier $fichier");
+			return;
 		}
 
-		$poids = filesize($fichier);
 		if (!$type_image) {
 			if (_DOC_MAX_SIZE > 0
-			AND $poids > _DOC_MAX_SIZE*1024) {
+			AND $taille > _DOC_MAX_SIZE*1024) {
 				@unlink ($fichier);
 				check_upload_error(6,
 				_T('info_logo_max_poids',
 					array('maxi' => taille_en_octets(_DOC_MAX_SIZE*1024),
-					'actuel' => taille_en_octets($poids))));
+					'actuel' => taille_en_octets($taille))));
 			}
 		}
 		else {
 			if (_IMG_MAX_SIZE > 0
-			AND $poids > _IMG_MAX_SIZE*1024) {
+			AND $taille > _IMG_MAX_SIZE*1024) {
 				@unlink ($fichier);
 				check_upload_error(6,
 				_T('info_logo_max_poids',
 					array('maxi' => taille_en_octets(_IMG_MAX_SIZE*1024),
-					'actuel' => taille_en_octets($poids))));
+					'actuel' => taille_en_octets($taille))));
 			}
 	
 			if (_IMG_MAX_WIDTH * _IMG_MAX_HEIGHT
@@ -407,6 +409,32 @@ function ajouter_un_document ($source, $nom_envoye, $type_lien, $id_lien, $mode,
 	return true;
 }
 
+function traite_svg($file)
+{
+	include_spip('inc/texte');
+	$texte = spip_file_get_contents($file);
+	$new = safehtml($texte);
+
+	// securite: virer les scripts et les references externes
+	if ($new != $texte) ecrire_fichier($file, $new);
+	$width = $height = 150;
+
+	if (preg_match(',<svg[^>]+>,', $new, $s)) {
+		$s = $s[0];
+	// si la taille est en centimetre, estimer le pixel a 1/64 de cm
+		if (preg_match(',\Wwidth\s*=\s*.(\d+)([^"\']*),', $s, $r)){
+			$width = $r[1];
+			if ($r[2] == 'cm') $width <<=6;
+		}
+		if (preg_match(',\Wheight\s*=\s*.(\d+)([^"\']*),', $s, $r)){
+                	$height = $r[1];
+			if ($r[2] == 'cm') $height <<=6;
+		}
+	}
+	return array($width, $height);
+}
+
+
 function afficher_compactes($action) {
 	minipres(_T('upload_fichier_zip'),
 	  "<p>" .
diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php
index 25538b045077d850b058a0868ea440d0aba1f634..ec7845eb22e058e67682b1cd975efa1e7cff38af 100644
--- a/ecrire/inc_version.php
+++ b/ecrire/inc_version.php
@@ -220,7 +220,7 @@ $tables_des_serveurs_sql['localhost'] =  &$tables_principales;
 // (utilise pour les modifs de la base de donnees)
 
 // version de la base
-$spip_version = 1.913;
+$spip_version = 1.914;
 
 // version de spip
 $spip_version_affichee = '1.9 beta 3';
diff --git a/ecrire/safehtml/classes/safehtml.php b/ecrire/safehtml/classes/safehtml.php
index 284078e31243ebbb03a52c2166b0abf74fc881da..2429d152dcccfbf393fa6605651b8bb0da21cbe5 100755
--- a/ecrire/safehtml/classes/safehtml.php
+++ b/ecrire/safehtml/classes/safehtml.php
@@ -123,7 +123,7 @@ class SafeHTML
     if (in_array($name, $this->attributes)) {
      continue;
     }
-    if (!preg_match("/^[a-z0-9]+$/i", $name)) {
+    if (!preg_match("/^[a-z0-9-]+$/i", $name)) {
       if (!in_array($name, $this->attributesNS))
       {
        continue;