Skip to content
Extraits de code Groupes Projets
Valider e9ae893f rédigé par cedric@yterium.com's avatar cedric@yterium.com
Parcourir les fichiers

au chargement d'un SVG on reecrit toujours la viewbox en px et on force un...

au chargement d'un SVG on reecrit toujours la viewbox en px et on force un width et un height aussi si il y en a pas, ou on convertit en px - sinon la colorbox foire
parent 0bc044e8
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -35,39 +35,47 @@ include_spip('inc/autoriser'); ...@@ -35,39 +35,47 @@ include_spip('inc/autoriser');
*/ */
function metadata_svg_dist($file) { function metadata_svg_dist($file) {
// Securite si pas autorise : virer les scripts et les references externes include_spip('inc/svg');
// sauf si on est en mode javascript 'ok' (1), cf. inc_version if ($svg = svg_charger($file)) {
if ($GLOBALS['filtrer_javascript'] < 1
// qu'on soit admin ou non, on sanitize les SVGs car rien ne dit qu'un admin sait que ca contient du JS
// and !autoriser('televerser', 'script')
) {
spip_log("sanitization SVG $file", "svg");
include_spip('lib/svg-sanitizer/src/Sanitizer'); // forcer une viewBox et width+height en px
include_spip('lib/svg-sanitizer/src/data/AttributeInterface'); $svg = svg_force_viewBox_px($svg, true);
include_spip('lib/svg-sanitizer/src/data/AllowedAttributes');
include_spip('lib/svg-sanitizer/src/data/TagInterface');
include_spip('lib/svg-sanitizer/src/data/AllowedTags');
$sanitizer = new Sanitizer(); // Securite si pas autorise : virer les scripts et les references externes
$sanitizer->setXMLOptions(0); // garder les balises vide en ecriture raccourcie // sauf si on est en mode javascript 'ok' (1), cf. inc_version
if ($GLOBALS['filtrer_javascript'] < 1
// qu'on soit admin ou non, on sanitize les SVGs car rien ne dit qu'un admin sait que ca contient du JS
// and !autoriser('televerser', 'script')
) {
spip_log("sanitization SVG $file", "svg");
$svg = file_get_contents($file); include_spip('lib/svg-sanitizer/src/Sanitizer');
include_spip('lib/svg-sanitizer/src/data/AttributeInterface');
include_spip('lib/svg-sanitizer/src/data/AllowedAttributes');
include_spip('lib/svg-sanitizer/src/data/TagInterface');
include_spip('lib/svg-sanitizer/src/data/AllowedTags');
// Pass it to the sanitizer and get it back clean $sanitizer = new Sanitizer();
$clean_svg = $sanitizer->sanitize($svg); $sanitizer->setXMLOptions(0); // garder les balises vide en ecriture raccourcie
ecrire_fichier($file, $clean_svg);
// loger les sanitization // Pass it to the sanitizer and get it back clean
$trace = ""; $svg = $sanitizer->sanitize($svg);
foreach ($sanitizer->getXmlIssues() as $issue) {
$trace .= $issue['message'] . " L".$issue['line']."\n"; // loger les sanitization
} $trace = "";
if ($trace) { foreach ($sanitizer->getXmlIssues() as $issue) {
spip_log($trace, "svg" . _LOG_DEBUG); $trace .= $issue['message'] . " L".$issue['line']."\n";
}
if ($trace) {
spip_log($trace, "svg" . _LOG_DEBUG);
}
} }
ecrire_fichier($file, $svg);
$metadata = charger_fonction('image', 'metadata');
return $metadata($file);
} }
$metadata = charger_fonction('image', 'metadata'); // pas de svg valide
return $metadata($file); return array();
} }
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