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;