From e9ae893faadcbfef9ffee3775695bfd697a70a96 Mon Sep 17 00:00:00 2001
From: "cedric@yterium.com" <>
Date: Thu, 25 Jul 2019 11:44:27 +0000
Subject: [PATCH] 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

---
 metadata/svg.php | 62 +++++++++++++++++++++++++++---------------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/metadata/svg.php b/metadata/svg.php
index b7cd47c7..7fda57b3 100644
--- a/metadata/svg.php
+++ b/metadata/svg.php
@@ -35,39 +35,47 @@ include_spip('inc/autoriser');
  */
 function metadata_svg_dist($file) {
 
-	// Securite si pas autorise : virer les scripts et les references externes
-	// 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");
+	include_spip('inc/svg');
+	if ($svg = svg_charger($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');
+		// forcer une viewBox et width+height en px
+		$svg = svg_force_viewBox_px($svg, true);
 
-		$sanitizer = new Sanitizer();
-		$sanitizer->setXMLOptions(0); // garder les balises vide en ecriture raccourcie
+		// Securite si pas autorise : virer les scripts et les references externes
+		// 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
-		$clean_svg = $sanitizer->sanitize($svg);
-		ecrire_fichier($file, $clean_svg);
+			$sanitizer = new Sanitizer();
+			$sanitizer->setXMLOptions(0); // garder les balises vide en ecriture raccourcie
 
-		// loger les sanitization
-		$trace = "";
-		foreach ($sanitizer->getXmlIssues() as $issue) {
-			$trace .= $issue['message'] . " L".$issue['line']."\n";
-		}
-		if ($trace) {
-			spip_log($trace, "svg" . _LOG_DEBUG);
+			// 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);
+			}
 		}
+
+		ecrire_fichier($file, $svg);
+		$metadata = charger_fonction('image', 'metadata');
+		return $metadata($file);
 	}
 
-	$metadata = charger_fonction('image', 'metadata');
-	return $metadata($file);
+	// pas de svg valide
+	return array();
 }
-- 
GitLab