Skip to content
Extraits de code Groupes Projets
Valider 871b40cb rédigé par cerdic's avatar cerdic
Parcourir les fichiers

On introduit un sanitizer explicite, definissable extension par extension, car...

On introduit un sanitizer explicite, definissable extension par extension, car sanitizer dans la fonction de lecture des metadata est tout sauf propre et fiable
parent 38e79441
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -202,6 +202,11 @@ function action_ajouter_un_document_dist($id_document, $file, $objet, $id_objet,
}
}
// voir si le document a besoin d'un nettoyage et le cas echeant relire ses infos apres
if (sanitizer_document($champs['fichier'], $champs['extension'])) {
$infos = renseigner_taille_dimension_image($champs['fichier'], $champs['extension']);
}
$champs = array_merge($champs, $infos);
// Si mode == 'choix', fixer le mode image/document
......
......@@ -159,3 +159,22 @@ function renseigner_taille_dimension_image($fichier, $ext, $distant = false) {
return $infos;
}
/**
* @param string $fichier
* @param string $ext
* @return bool
*/
function sanitizer_document($fichier, $ext) {
// verifier que le fichier existe, sinon on ne peut rien faire
if (
!$fichier
or !@file_exists($fichier)) {
return false;
}
if ($sanitizer = charger_fonction($ext, 'sanitizer', true)){
return $sanitizer($fichier);
}
return false;
}
\ No newline at end of file
<paquet
prefix="medias"
categorie="multimedia"
version="2.26.0"
version="2.26.1"
etat="stable"
compatibilite="[3.3.0-dev;3.3.*]"
logo="prive/themes/spip/images/portfolio-32.png"
......
......@@ -24,16 +24,15 @@ if (!defined('_ECRIRE_INC_VERSION')) {
include_spip('inc/autoriser');
/**
* Déterminer les dimensions d'un svg, et enlever ses scripts si nécessaire
* Nettoyer et normaliser un svg, et enlever ses scripts si nécessaire
*
* On utilise safehtml qui n'est pas apropriée pour ça en attendant mieux
* cf http://www.slideshare.net/x00mario/the-image-that-called-me
* http://heideri.ch/svgpurifier/SVGPurifier/index.php
*
* @param string $file
* @return array Tableau (largeur, hauteur)
*/
function metadata_svg_dist($file) {
function sanitizer_svg_dist($file) {
include_spip('inc/svg');
if ($svg = svg_charger($file)) {
......@@ -55,27 +54,32 @@ function metadata_svg_dist($file) {
include_spip('lib/svg-sanitizer/src/data/TagInterface');
include_spip('lib/svg-sanitizer/src/data/AllowedTags');
$sanitizer = new Sanitizer();
$sanitizer->setXMLOptions(0); // garder les balises vide en ecriture raccourcie
// sanitization can need multiples call
$maxiter = 10;
do {
$size = strlen($svg);
$sanitizer = new Sanitizer();
$sanitizer->setXMLOptions(0); // garder les balises vide en ecriture raccourcie
// Pass it to the sanitizer and get it back clean
$svg = $sanitizer->sanitize($svg);
// Pass it to the sanitizer and get it back clean
$svg = $sanitizer->sanitize($svg);
// loger les sanitization
$trace = "";
foreach ($sanitizer->getXmlIssues() as $issue) {
$trace .= $issue['message'] . " L".$issue['line']."\n";
}
if ($trace) {
spip_log($trace, "svg" . _LOG_DEBUG);
}
// loger les sanitization
$trace = "";
foreach ($sanitizer->getXmlIssues() as $issue) {
$trace .= $issue['message'] . " L".$issue['line']."\n";
}
if ($trace) {
spip_log($trace, "svg" . _LOG_DEBUG);
}
} while (strlen($svg) !== $size and $maxiter-->0);
}
ecrire_fichier($file, $svg);
$metadata = charger_fonction('image', 'metadata');
return $metadata($file);
clearstatcache();
return true;
}
// pas de svg valide
return array();
return false;
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter