diff --git a/composer.json b/composer.json index e323f54eb..6d7597aa2 100644 --- a/composer.json +++ b/composer.json @@ -37,6 +37,7 @@ "assetic/framework": "~3.0", "doctrine/dbal": "^2.6", + "enshrined/svg-sanitize": "^0.15", "erusev/parsedown-extra": "~0.7", "laravel/framework": "^9.1", "laravel/tinker": "^2.7", diff --git a/src/Foundation/Bootstrap/RegisterWinter.php b/src/Foundation/Bootstrap/RegisterWinter.php index c9ff12699..073597b83 100644 --- a/src/Foundation/Bootstrap/RegisterWinter.php +++ b/src/Foundation/Bootstrap/RegisterWinter.php @@ -25,6 +25,9 @@ public function bootstrap(Application $app): void $app->singleton('string', function () { return new \Winter\Storm\Support\Str; }); + $app->singleton('svg', function () { + return new \Winter\Storm\Support\Svg; + }); /* * Change paths based on config diff --git a/src/Support/Facades/Svg.php b/src/Support/Facades/Svg.php new file mode 100644 index 000000000..c6e97a49e --- /dev/null +++ b/src/Support/Facades/Svg.php @@ -0,0 +1,21 @@ +removeRemoteReferences(true); + $sanitizer->removeXMLTag(true); + + if ($minify) { + $sanitizer->minify(true); + } + + return trim($sanitizer->sanitize($svg)); + } +} diff --git a/tests/Support/SvgTest.php b/tests/Support/SvgTest.php new file mode 100644 index 000000000..7bc723271 --- /dev/null +++ b/tests/Support/SvgTest.php @@ -0,0 +1,22 @@ +assertEquals($fixture, $svg); + } + + public function testDirtySvg() + { + $svg = Svg::extract(dirname(__DIR__) . '/fixtures/svg/winter-dirty.svg'); + $fixture = trim(file_get_contents(dirname(__DIR__) . '/fixtures/svg/extracted/winter-dirty.svg')); + + $this->assertEquals($fixture, $svg); + } +} diff --git a/tests/fixtures/svg/extracted/winter-dirty.svg b/tests/fixtures/svg/extracted/winter-dirty.svg new file mode 100644 index 000000000..31a09caba --- /dev/null +++ b/tests/fixtures/svg/extracted/winter-dirty.svg @@ -0,0 +1 @@ + link diff --git a/tests/fixtures/svg/extracted/winter.svg b/tests/fixtures/svg/extracted/winter.svg new file mode 100644 index 000000000..6386f7eb1 --- /dev/null +++ b/tests/fixtures/svg/extracted/winter.svg @@ -0,0 +1 @@ + diff --git a/tests/fixtures/svg/winter-dirty.svg b/tests/fixtures/svg/winter-dirty.svg new file mode 100644 index 000000000..55656a44c --- /dev/null +++ b/tests/fixtures/svg/winter-dirty.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + shouldn't be here + + + + + + link + + + diff --git a/tests/fixtures/svg/winter.svg b/tests/fixtures/svg/winter.svg new file mode 100644 index 000000000..6c7ddced0 --- /dev/null +++ b/tests/fixtures/svg/winter.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +