first
1617
wp-content/plugins/svg-support/vendor/DOMPurify/DOMPurify.js
vendored
Normal file
2
wp-content/plugins/svg-support/vendor/DOMPurify/DOMPurify.min.js
vendored
Normal file
7
wp-content/plugins/svg-support/vendor/autoload.php
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
<?php
|
||||
|
||||
// autoload.php @generated by Composer
|
||||
|
||||
require_once __DIR__ . '/composer/autoload_real.php';
|
||||
|
||||
return ComposerAutoloaderInit61c7f72a5d76a6a96ee3c8825ef2f87a::getLoader();
|
445
wp-content/plugins/svg-support/vendor/composer/ClassLoader.php
vendored
Normal file
@ -0,0 +1,445 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of Composer.
|
||||
*
|
||||
* (c) Nils Adermann <naderman@naderman.de>
|
||||
* Jordi Boggiano <j.boggiano@seld.be>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
/**
|
||||
* ClassLoader implements a PSR-0, PSR-4 and classmap class loader.
|
||||
*
|
||||
* $loader = new \Composer\Autoload\ClassLoader();
|
||||
*
|
||||
* // register classes with namespaces
|
||||
* $loader->add('Symfony\Component', __DIR__.'/component');
|
||||
* $loader->add('Symfony', __DIR__.'/framework');
|
||||
*
|
||||
* // activate the autoloader
|
||||
* $loader->register();
|
||||
*
|
||||
* // to enable searching the include path (eg. for PEAR packages)
|
||||
* $loader->setUseIncludePath(true);
|
||||
*
|
||||
* In this example, if you try to use a class in the Symfony\Component
|
||||
* namespace or one of its children (Symfony\Component\Console for instance),
|
||||
* the autoloader will first look for the class under the component/
|
||||
* directory, and it will then fallback to the framework/ directory if not
|
||||
* found before giving up.
|
||||
*
|
||||
* This class is loosely based on the Symfony UniversalClassLoader.
|
||||
*
|
||||
* @author Fabien Potencier <fabien@symfony.com>
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
* @see https://www.php-fig.org/psr/psr-0/
|
||||
* @see https://www.php-fig.org/psr/psr-4/
|
||||
*/
|
||||
class ClassLoader
|
||||
{
|
||||
// PSR-4
|
||||
private $prefixLengthsPsr4 = array();
|
||||
private $prefixDirsPsr4 = array();
|
||||
private $fallbackDirsPsr4 = array();
|
||||
|
||||
// PSR-0
|
||||
private $prefixesPsr0 = array();
|
||||
private $fallbackDirsPsr0 = array();
|
||||
|
||||
private $useIncludePath = false;
|
||||
private $classMap = array();
|
||||
private $classMapAuthoritative = false;
|
||||
private $missingClasses = array();
|
||||
private $apcuPrefix;
|
||||
|
||||
public function getPrefixes()
|
||||
{
|
||||
if (!empty($this->prefixesPsr0)) {
|
||||
return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
|
||||
}
|
||||
|
||||
return array();
|
||||
}
|
||||
|
||||
public function getPrefixesPsr4()
|
||||
{
|
||||
return $this->prefixDirsPsr4;
|
||||
}
|
||||
|
||||
public function getFallbackDirs()
|
||||
{
|
||||
return $this->fallbackDirsPsr0;
|
||||
}
|
||||
|
||||
public function getFallbackDirsPsr4()
|
||||
{
|
||||
return $this->fallbackDirsPsr4;
|
||||
}
|
||||
|
||||
public function getClassMap()
|
||||
{
|
||||
return $this->classMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $classMap Class to filename map
|
||||
*/
|
||||
public function addClassMap(array $classMap)
|
||||
{
|
||||
if ($this->classMap) {
|
||||
$this->classMap = array_merge($this->classMap, $classMap);
|
||||
} else {
|
||||
$this->classMap = $classMap;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-0 directories for a given prefix, either
|
||||
* appending or prepending to the ones previously set for this prefix.
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @param array|string $paths The PSR-0 root directories
|
||||
* @param bool $prepend Whether to prepend the directories
|
||||
*/
|
||||
public function add($prefix, $paths, $prepend = false)
|
||||
{
|
||||
if (!$prefix) {
|
||||
if ($prepend) {
|
||||
$this->fallbackDirsPsr0 = array_merge(
|
||||
(array) $paths,
|
||||
$this->fallbackDirsPsr0
|
||||
);
|
||||
} else {
|
||||
$this->fallbackDirsPsr0 = array_merge(
|
||||
$this->fallbackDirsPsr0,
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$first = $prefix[0];
|
||||
if (!isset($this->prefixesPsr0[$first][$prefix])) {
|
||||
$this->prefixesPsr0[$first][$prefix] = (array) $paths;
|
||||
|
||||
return;
|
||||
}
|
||||
if ($prepend) {
|
||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||
(array) $paths,
|
||||
$this->prefixesPsr0[$first][$prefix]
|
||||
);
|
||||
} else {
|
||||
$this->prefixesPsr0[$first][$prefix] = array_merge(
|
||||
$this->prefixesPsr0[$first][$prefix],
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-4 directories for a given namespace, either
|
||||
* appending or prepending to the ones previously set for this namespace.
|
||||
*
|
||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||
* @param array|string $paths The PSR-4 base directories
|
||||
* @param bool $prepend Whether to prepend the directories
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function addPsr4($prefix, $paths, $prepend = false)
|
||||
{
|
||||
if (!$prefix) {
|
||||
// Register directories for the root namespace.
|
||||
if ($prepend) {
|
||||
$this->fallbackDirsPsr4 = array_merge(
|
||||
(array) $paths,
|
||||
$this->fallbackDirsPsr4
|
||||
);
|
||||
} else {
|
||||
$this->fallbackDirsPsr4 = array_merge(
|
||||
$this->fallbackDirsPsr4,
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
} elseif (!isset($this->prefixDirsPsr4[$prefix])) {
|
||||
// Register directories for a new namespace.
|
||||
$length = strlen($prefix);
|
||||
if ('\\' !== $prefix[$length - 1]) {
|
||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||
}
|
||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||
} elseif ($prepend) {
|
||||
// Prepend directories for an already registered namespace.
|
||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||
(array) $paths,
|
||||
$this->prefixDirsPsr4[$prefix]
|
||||
);
|
||||
} else {
|
||||
// Append directories for an already registered namespace.
|
||||
$this->prefixDirsPsr4[$prefix] = array_merge(
|
||||
$this->prefixDirsPsr4[$prefix],
|
||||
(array) $paths
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-0 directories for a given prefix,
|
||||
* replacing any others previously set for this prefix.
|
||||
*
|
||||
* @param string $prefix The prefix
|
||||
* @param array|string $paths The PSR-0 base directories
|
||||
*/
|
||||
public function set($prefix, $paths)
|
||||
{
|
||||
if (!$prefix) {
|
||||
$this->fallbackDirsPsr0 = (array) $paths;
|
||||
} else {
|
||||
$this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers a set of PSR-4 directories for a given namespace,
|
||||
* replacing any others previously set for this namespace.
|
||||
*
|
||||
* @param string $prefix The prefix/namespace, with trailing '\\'
|
||||
* @param array|string $paths The PSR-4 base directories
|
||||
*
|
||||
* @throws \InvalidArgumentException
|
||||
*/
|
||||
public function setPsr4($prefix, $paths)
|
||||
{
|
||||
if (!$prefix) {
|
||||
$this->fallbackDirsPsr4 = (array) $paths;
|
||||
} else {
|
||||
$length = strlen($prefix);
|
||||
if ('\\' !== $prefix[$length - 1]) {
|
||||
throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator.");
|
||||
}
|
||||
$this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length;
|
||||
$this->prefixDirsPsr4[$prefix] = (array) $paths;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns on searching the include path for class files.
|
||||
*
|
||||
* @param bool $useIncludePath
|
||||
*/
|
||||
public function setUseIncludePath($useIncludePath)
|
||||
{
|
||||
$this->useIncludePath = $useIncludePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Can be used to check if the autoloader uses the include path to check
|
||||
* for classes.
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function getUseIncludePath()
|
||||
{
|
||||
return $this->useIncludePath;
|
||||
}
|
||||
|
||||
/**
|
||||
* Turns off searching the prefix and fallback directories for classes
|
||||
* that have not been registered with the class map.
|
||||
*
|
||||
* @param bool $classMapAuthoritative
|
||||
*/
|
||||
public function setClassMapAuthoritative($classMapAuthoritative)
|
||||
{
|
||||
$this->classMapAuthoritative = $classMapAuthoritative;
|
||||
}
|
||||
|
||||
/**
|
||||
* Should class lookup fail if not found in the current class map?
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function isClassMapAuthoritative()
|
||||
{
|
||||
return $this->classMapAuthoritative;
|
||||
}
|
||||
|
||||
/**
|
||||
* APCu prefix to use to cache found/not-found classes, if the extension is enabled.
|
||||
*
|
||||
* @param string|null $apcuPrefix
|
||||
*/
|
||||
public function setApcuPrefix($apcuPrefix)
|
||||
{
|
||||
$this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* The APCu prefix in use, or null if APCu caching is not enabled.
|
||||
*
|
||||
* @return string|null
|
||||
*/
|
||||
public function getApcuPrefix()
|
||||
{
|
||||
return $this->apcuPrefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers this instance as an autoloader.
|
||||
*
|
||||
* @param bool $prepend Whether to prepend the autoloader or not
|
||||
*/
|
||||
public function register($prepend = false)
|
||||
{
|
||||
spl_autoload_register(array($this, 'loadClass'), true, $prepend);
|
||||
}
|
||||
|
||||
/**
|
||||
* Unregisters this instance as an autoloader.
|
||||
*/
|
||||
public function unregister()
|
||||
{
|
||||
spl_autoload_unregister(array($this, 'loadClass'));
|
||||
}
|
||||
|
||||
/**
|
||||
* Loads the given class or interface.
|
||||
*
|
||||
* @param string $class The name of the class
|
||||
* @return bool|null True if loaded, null otherwise
|
||||
*/
|
||||
public function loadClass($class)
|
||||
{
|
||||
if ($file = $this->findFile($class)) {
|
||||
includeFile($file);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds the path to the file where the class is defined.
|
||||
*
|
||||
* @param string $class The name of the class
|
||||
*
|
||||
* @return string|false The path if found, false otherwise
|
||||
*/
|
||||
public function findFile($class)
|
||||
{
|
||||
// class map lookup
|
||||
if (isset($this->classMap[$class])) {
|
||||
return $this->classMap[$class];
|
||||
}
|
||||
if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) {
|
||||
return false;
|
||||
}
|
||||
if (null !== $this->apcuPrefix) {
|
||||
$file = apcu_fetch($this->apcuPrefix.$class, $hit);
|
||||
if ($hit) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
$file = $this->findFileWithExtension($class, '.php');
|
||||
|
||||
// Search for Hack files if we are running on HHVM
|
||||
if (false === $file && defined('HHVM_VERSION')) {
|
||||
$file = $this->findFileWithExtension($class, '.hh');
|
||||
}
|
||||
|
||||
if (null !== $this->apcuPrefix) {
|
||||
apcu_add($this->apcuPrefix.$class, $file);
|
||||
}
|
||||
|
||||
if (false === $file) {
|
||||
// Remember that this class does not exist.
|
||||
$this->missingClasses[$class] = true;
|
||||
}
|
||||
|
||||
return $file;
|
||||
}
|
||||
|
||||
private function findFileWithExtension($class, $ext)
|
||||
{
|
||||
// PSR-4 lookup
|
||||
$logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext;
|
||||
|
||||
$first = $class[0];
|
||||
if (isset($this->prefixLengthsPsr4[$first])) {
|
||||
$subPath = $class;
|
||||
while (false !== $lastPos = strrpos($subPath, '\\')) {
|
||||
$subPath = substr($subPath, 0, $lastPos);
|
||||
$search = $subPath . '\\';
|
||||
if (isset($this->prefixDirsPsr4[$search])) {
|
||||
$pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1);
|
||||
foreach ($this->prefixDirsPsr4[$search] as $dir) {
|
||||
if (file_exists($file = $dir . $pathEnd)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-4 fallback dirs
|
||||
foreach ($this->fallbackDirsPsr4 as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 lookup
|
||||
if (false !== $pos = strrpos($class, '\\')) {
|
||||
// namespaced class name
|
||||
$logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1)
|
||||
. strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR);
|
||||
} else {
|
||||
// PEAR-like class name
|
||||
$logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext;
|
||||
}
|
||||
|
||||
if (isset($this->prefixesPsr0[$first])) {
|
||||
foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
|
||||
if (0 === strpos($class, $prefix)) {
|
||||
foreach ($dirs as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 fallback dirs
|
||||
foreach ($this->fallbackDirsPsr0 as $dir) {
|
||||
if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
|
||||
// PSR-0 include paths.
|
||||
if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) {
|
||||
return $file;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Scope isolated include.
|
||||
*
|
||||
* Prevents access to $this/self from included files.
|
||||
*/
|
||||
function includeFile($file)
|
||||
{
|
||||
include $file;
|
||||
}
|
228
wp-content/plugins/svg-support/vendor/composer/InstalledVersions.php
vendored
Normal file
@ -0,0 +1,228 @@
|
||||
<?php
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
namespace Composer;
|
||||
|
||||
use Composer\Semver\VersionParser;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class InstalledVersions
|
||||
{
|
||||
private static $installed = array (
|
||||
'root' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
'name' => '__root__',
|
||||
),
|
||||
'versions' =>
|
||||
array (
|
||||
'__root__' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
),
|
||||
'enshrined/svg-sanitize' =>
|
||||
array (
|
||||
'pretty_version' => '0.14.1',
|
||||
'version' => '0.14.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '307b42066fb0b76b5119f5e1f0826e18fefabe95',
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getInstalledPackages()
|
||||
{
|
||||
return array_keys(self::$installed['versions']);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function isInstalled($packageName)
|
||||
{
|
||||
return isset(self::$installed['versions'][$packageName]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function satisfies(VersionParser $parser, $packageName, $constraint)
|
||||
{
|
||||
$constraint = $parser->parseConstraints($constraint);
|
||||
$provided = $parser->parseConstraints(self::getVersionRanges($packageName));
|
||||
|
||||
return $provided->matches($constraint);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getVersionRanges($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
$ranges = array();
|
||||
if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
|
||||
$ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
|
||||
}
|
||||
if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
|
||||
}
|
||||
if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
|
||||
}
|
||||
if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
|
||||
$ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
|
||||
}
|
||||
|
||||
return implode(' || ', $ranges);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getVersion($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
if (!isset(self::$installed['versions'][$packageName]['version'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::$installed['versions'][$packageName]['version'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getPrettyVersion($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::$installed['versions'][$packageName]['pretty_version'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getReference($packageName)
|
||||
{
|
||||
if (!isset(self::$installed['versions'][$packageName])) {
|
||||
throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
|
||||
}
|
||||
|
||||
if (!isset(self::$installed['versions'][$packageName]['reference'])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return self::$installed['versions'][$packageName]['reference'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getRootPackage()
|
||||
{
|
||||
return self::$installed['root'];
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function getRawData()
|
||||
{
|
||||
return self::$installed;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public static function reload($data)
|
||||
{
|
||||
self::$installed = $data;
|
||||
}
|
||||
}
|
21
wp-content/plugins/svg-support/vendor/composer/LICENSE
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
|
||||
Copyright (c) Nils Adermann, Jordi Boggiano
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is furnished
|
||||
to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
|
10
wp-content/plugins/svg-support/vendor/composer/autoload_classmap.php
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
// autoload_classmap.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
|
||||
);
|
9
wp-content/plugins/svg-support/vendor/composer/autoload_namespaces.php
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
// autoload_namespaces.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
);
|
10
wp-content/plugins/svg-support/vendor/composer/autoload_psr4.php
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
<?php
|
||||
|
||||
// autoload_psr4.php @generated by Composer
|
||||
|
||||
$vendorDir = dirname(dirname(__FILE__));
|
||||
$baseDir = dirname($vendorDir);
|
||||
|
||||
return array(
|
||||
'enshrined\\svgSanitize\\' => array($vendorDir . '/enshrined/svg-sanitize/src'),
|
||||
);
|
57
wp-content/plugins/svg-support/vendor/composer/autoload_real.php
vendored
Normal file
@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
// autoload_real.php @generated by Composer
|
||||
|
||||
class ComposerAutoloaderInit61c7f72a5d76a6a96ee3c8825ef2f87a
|
||||
{
|
||||
private static $loader;
|
||||
|
||||
public static function loadClassLoader($class)
|
||||
{
|
||||
if ('Composer\Autoload\ClassLoader' === $class) {
|
||||
require __DIR__ . '/ClassLoader.php';
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \Composer\Autoload\ClassLoader
|
||||
*/
|
||||
public static function getLoader()
|
||||
{
|
||||
if (null !== self::$loader) {
|
||||
return self::$loader;
|
||||
}
|
||||
|
||||
require __DIR__ . '/platform_check.php';
|
||||
|
||||
spl_autoload_register(array('ComposerAutoloaderInit61c7f72a5d76a6a96ee3c8825ef2f87a', 'loadClassLoader'), true, true);
|
||||
self::$loader = $loader = new \Composer\Autoload\ClassLoader();
|
||||
spl_autoload_unregister(array('ComposerAutoloaderInit61c7f72a5d76a6a96ee3c8825ef2f87a', 'loadClassLoader'));
|
||||
|
||||
$useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
|
||||
if ($useStaticLoader) {
|
||||
require __DIR__ . '/autoload_static.php';
|
||||
|
||||
call_user_func(\Composer\Autoload\ComposerStaticInit61c7f72a5d76a6a96ee3c8825ef2f87a::getInitializer($loader));
|
||||
} else {
|
||||
$map = require __DIR__ . '/autoload_namespaces.php';
|
||||
foreach ($map as $namespace => $path) {
|
||||
$loader->set($namespace, $path);
|
||||
}
|
||||
|
||||
$map = require __DIR__ . '/autoload_psr4.php';
|
||||
foreach ($map as $namespace => $path) {
|
||||
$loader->setPsr4($namespace, $path);
|
||||
}
|
||||
|
||||
$classMap = require __DIR__ . '/autoload_classmap.php';
|
||||
if ($classMap) {
|
||||
$loader->addClassMap($classMap);
|
||||
}
|
||||
}
|
||||
|
||||
$loader->register(true);
|
||||
|
||||
return $loader;
|
||||
}
|
||||
}
|
36
wp-content/plugins/svg-support/vendor/composer/autoload_static.php
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
<?php
|
||||
|
||||
// autoload_static.php @generated by Composer
|
||||
|
||||
namespace Composer\Autoload;
|
||||
|
||||
class ComposerStaticInit61c7f72a5d76a6a96ee3c8825ef2f87a
|
||||
{
|
||||
public static $prefixLengthsPsr4 = array (
|
||||
'e' =>
|
||||
array (
|
||||
'enshrined\\svgSanitize\\' => 22,
|
||||
),
|
||||
);
|
||||
|
||||
public static $prefixDirsPsr4 = array (
|
||||
'enshrined\\svgSanitize\\' =>
|
||||
array (
|
||||
0 => __DIR__ . '/..' . '/enshrined/svg-sanitize/src',
|
||||
),
|
||||
);
|
||||
|
||||
public static $classMap = array (
|
||||
'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
|
||||
);
|
||||
|
||||
public static function getInitializer(ClassLoader $loader)
|
||||
{
|
||||
return \Closure::bind(function () use ($loader) {
|
||||
$loader->prefixLengthsPsr4 = ComposerStaticInit61c7f72a5d76a6a96ee3c8825ef2f87a::$prefixLengthsPsr4;
|
||||
$loader->prefixDirsPsr4 = ComposerStaticInit61c7f72a5d76a6a96ee3c8825ef2f87a::$prefixDirsPsr4;
|
||||
$loader->classMap = ComposerStaticInit61c7f72a5d76a6a96ee3c8825ef2f87a::$classMap;
|
||||
|
||||
}, null, ClassLoader::class);
|
||||
}
|
||||
}
|
55
wp-content/plugins/svg-support/vendor/composer/installed.json
vendored
Normal file
@ -0,0 +1,55 @@
|
||||
{
|
||||
"packages": [
|
||||
{
|
||||
"name": "enshrined/svg-sanitize",
|
||||
"version": "0.14.1",
|
||||
"version_normalized": "0.14.1.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/darylldoyle/svg-sanitizer.git",
|
||||
"reference": "307b42066fb0b76b5119f5e1f0826e18fefabe95"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/darylldoyle/svg-sanitizer/zipball/307b42066fb0b76b5119f5e1f0826e18fefabe95",
|
||||
"reference": "307b42066fb0b76b5119f5e1f0826e18fefabe95",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-dom": "*",
|
||||
"ext-libxml": "*",
|
||||
"php": "^7.0 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"codeclimate/php-test-reporter": "^0.1.2",
|
||||
"phpunit/phpunit": "^6.5 || ^8.5"
|
||||
},
|
||||
"time": "2021-08-09T23:46:54+00:00",
|
||||
"type": "library",
|
||||
"installation-source": "dist",
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"enshrined\\svgSanitize\\": "src"
|
||||
}
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"GPL-2.0-or-later"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Daryll Doyle",
|
||||
"email": "daryll@enshrined.co.uk"
|
||||
}
|
||||
],
|
||||
"description": "An SVG sanitizer for PHP",
|
||||
"support": {
|
||||
"issues": "https://github.com/darylldoyle/svg-sanitizer/issues",
|
||||
"source": "https://github.com/darylldoyle/svg-sanitizer/tree/0.14.1"
|
||||
},
|
||||
"install-path": "../enshrined/svg-sanitize"
|
||||
}
|
||||
],
|
||||
"dev": true,
|
||||
"dev-package-names": []
|
||||
}
|
33
wp-content/plugins/svg-support/vendor/composer/installed.php
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
<?php return array (
|
||||
'root' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
'name' => '__root__',
|
||||
),
|
||||
'versions' =>
|
||||
array (
|
||||
'__root__' =>
|
||||
array (
|
||||
'pretty_version' => '1.0.0+no-version-set',
|
||||
'version' => '1.0.0.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => NULL,
|
||||
),
|
||||
'enshrined/svg-sanitize' =>
|
||||
array (
|
||||
'pretty_version' => '0.14.1',
|
||||
'version' => '0.14.1.0',
|
||||
'aliases' =>
|
||||
array (
|
||||
),
|
||||
'reference' => '307b42066fb0b76b5119f5e1f0826e18fefabe95',
|
||||
),
|
||||
),
|
||||
);
|
26
wp-content/plugins/svg-support/vendor/composer/platform_check.php
vendored
Normal file
@ -0,0 +1,26 @@
|
||||
<?php
|
||||
|
||||
// platform_check.php @generated by Composer
|
||||
|
||||
$issues = array();
|
||||
|
||||
if (!(PHP_VERSION_ID >= 50600)) {
|
||||
$issues[] = 'Your Composer dependencies require a PHP version ">= 5.6.0". You are running ' . PHP_VERSION . '.';
|
||||
}
|
||||
|
||||
if ($issues) {
|
||||
if (!headers_sent()) {
|
||||
header('HTTP/1.1 500 Internal Server Error');
|
||||
}
|
||||
if (!ini_get('display_errors')) {
|
||||
if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') {
|
||||
fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL);
|
||||
} elseif (!headers_sent()) {
|
||||
echo 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . str_replace('You are running '.PHP_VERSION.'.', '', implode(PHP_EOL, $issues)) . PHP_EOL.PHP_EOL;
|
||||
}
|
||||
}
|
||||
trigger_error(
|
||||
'Composer detected issues in your platform: ' . implode(' ', $issues),
|
||||
E_USER_ERROR
|
||||
);
|
||||
}
|
36
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/.github/workflows/tests.yml
vendored
Normal file
@ -0,0 +1,36 @@
|
||||
name: Tests
|
||||
|
||||
on: [push, pull_request]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
php: ['7.0', '7.1', '7.2', '7.3', '7.4', '8.0']
|
||||
fail-fast: false
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: Setup PHP
|
||||
uses: shivammathur/setup-php@v2
|
||||
with:
|
||||
php-version: ${{ matrix.php }}
|
||||
tools: composer:v2
|
||||
|
||||
- name: Validate composer.json and composer.lock
|
||||
run: composer validate
|
||||
|
||||
# - name: Lint PHP
|
||||
# uses: overtrue/phplint@7.4
|
||||
# with:
|
||||
# path: .
|
||||
# options: --exclude=vendor
|
||||
|
||||
- name: Install dependencies
|
||||
run: composer install --prefer-dist --no-progress
|
||||
|
||||
- name: Run test suite
|
||||
run: composer run-script test
|
5
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
/vendor
|
||||
/build
|
||||
/.idea
|
||||
/.phpunit.result.cache
|
||||
composer.lock
|
16
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/.travis.yml
vendored
Normal file
@ -0,0 +1,16 @@
|
||||
language: php
|
||||
php:
|
||||
- 7.0
|
||||
- 7.1
|
||||
- 7.2
|
||||
|
||||
before_script:
|
||||
- composer install --dev
|
||||
|
||||
addons:
|
||||
code_climate:
|
||||
repo_token: c051f6d29cce2d4ab0d6dfa460798b050cced025311f94ab3ba1ed50c7ceb31e
|
||||
|
||||
after_script:
|
||||
- CODECLIMATE_REPO_TOKEN="c051f6d29cce2d4ab0d6dfa460798b050cced025311f94ab3ba1ed50c7ceb31e" vendor/bin/test-reporter --stdout > build/logs/codeclimate.json
|
||||
- "curl --verbose -X POST -d @build/logs/codeclimate.json -H 'Content-Type: application/json' -H 'User-Agent: Code Climate (PHP Test Reporter v0.1.1)' https://codeclimate.com/test_reports"
|
340
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/LICENSE
vendored
Normal file
@ -0,0 +1,340 @@
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
Version 2, June 1991
|
||||
|
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
Preamble
|
||||
|
||||
The licenses for most software are designed to take away your
|
||||
freedom to share and change it. By contrast, the GNU General Public
|
||||
License is intended to guarantee your freedom to share and change free
|
||||
software--to make sure the software is free for all its users. This
|
||||
General Public License applies to most of the Free Software
|
||||
Foundation's software and to any other program whose authors commit to
|
||||
using it. (Some other Free Software Foundation software is covered by
|
||||
the GNU Lesser General Public License instead.) You can apply it to
|
||||
your programs, too.
|
||||
|
||||
When we speak of free software, we are referring to freedom, not
|
||||
price. Our General Public Licenses are designed to make sure that you
|
||||
have the freedom to distribute copies of free software (and charge for
|
||||
this service if you wish), that you receive source code or can get it
|
||||
if you want it, that you can change the software or use pieces of it
|
||||
in new free programs; and that you know you can do these things.
|
||||
|
||||
To protect your rights, we need to make restrictions that forbid
|
||||
anyone to deny you these rights or to ask you to surrender the rights.
|
||||
These restrictions translate to certain responsibilities for you if you
|
||||
distribute copies of the software, or if you modify it.
|
||||
|
||||
For example, if you distribute copies of such a program, whether
|
||||
gratis or for a fee, you must give the recipients all the rights that
|
||||
you have. You must make sure that they, too, receive or can get the
|
||||
source code. And you must show them these terms so they know their
|
||||
rights.
|
||||
|
||||
We protect your rights with two steps: (1) copyright the software, and
|
||||
(2) offer you this license which gives you legal permission to copy,
|
||||
distribute and/or modify the software.
|
||||
|
||||
Also, for each author's protection and ours, we want to make certain
|
||||
that everyone understands that there is no warranty for this free
|
||||
software. If the software is modified by someone else and passed on, we
|
||||
want its recipients to know that what they have is not the original, so
|
||||
that any problems introduced by others will not reflect on the original
|
||||
authors' reputations.
|
||||
|
||||
Finally, any free program is threatened constantly by software
|
||||
patents. We wish to avoid the danger that redistributors of a free
|
||||
program will individually obtain patent licenses, in effect making the
|
||||
program proprietary. To prevent this, we have made it clear that any
|
||||
patent must be licensed for everyone's free use or not licensed at all.
|
||||
|
||||
The precise terms and conditions for copying, distribution and
|
||||
modification follow.
|
||||
|
||||
GNU GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
0. This License applies to any program or other work which contains
|
||||
a notice placed by the copyright holder saying it may be distributed
|
||||
under the terms of this General Public License. The "Program", below,
|
||||
refers to any such program or work, and a "work based on the Program"
|
||||
means either the Program or any derivative work under copyright law:
|
||||
that is to say, a work containing the Program or a portion of it,
|
||||
either verbatim or with modifications and/or translated into another
|
||||
language. (Hereinafter, translation is included without limitation in
|
||||
the term "modification".) Each licensee is addressed as "you".
|
||||
|
||||
Activities other than copying, distribution and modification are not
|
||||
covered by this License; they are outside its scope. The act of
|
||||
running the Program is not restricted, and the output from the Program
|
||||
is covered only if its contents constitute a work based on the
|
||||
Program (independent of having been made by running the Program).
|
||||
Whether that is true depends on what the Program does.
|
||||
|
||||
1. You may copy and distribute verbatim copies of the Program's
|
||||
source code as you receive it, in any medium, provided that you
|
||||
conspicuously and appropriately publish on each copy an appropriate
|
||||
copyright notice and disclaimer of warranty; keep intact all the
|
||||
notices that refer to this License and to the absence of any warranty;
|
||||
and give any other recipients of the Program a copy of this License
|
||||
along with the Program.
|
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and
|
||||
you may at your option offer warranty protection in exchange for a fee.
|
||||
|
||||
2. You may modify your copy or copies of the Program or any portion
|
||||
of it, thus forming a work based on the Program, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
above, provided that you also meet all of these conditions:
|
||||
|
||||
a) You must cause the modified files to carry prominent notices
|
||||
stating that you changed the files and the date of any change.
|
||||
|
||||
b) You must cause any work that you distribute or publish, that in
|
||||
whole or in part contains or is derived from the Program or any
|
||||
part thereof, to be licensed as a whole at no charge to all third
|
||||
parties under the terms of this License.
|
||||
|
||||
c) If the modified program normally reads commands interactively
|
||||
when run, you must cause it, when started running for such
|
||||
interactive use in the most ordinary way, to print or display an
|
||||
announcement including an appropriate copyright notice and a
|
||||
notice that there is no warranty (or else, saying that you provide
|
||||
a warranty) and that users may redistribute the program under
|
||||
these conditions, and telling the user how to view a copy of this
|
||||
License. (Exception: if the Program itself is interactive but
|
||||
does not normally print such an announcement, your work based on
|
||||
the Program is not required to print an announcement.)
|
||||
|
||||
These requirements apply to the modified work as a whole. If
|
||||
identifiable sections of that work are not derived from the Program,
|
||||
and can be reasonably considered independent and separate works in
|
||||
themselves, then this License, and its terms, do not apply to those
|
||||
sections when you distribute them as separate works. But when you
|
||||
distribute the same sections as part of a whole which is a work based
|
||||
on the Program, the distribution of the whole must be on the terms of
|
||||
this License, whose permissions for other licensees extend to the
|
||||
entire whole, and thus to each and every part regardless of who wrote it.
|
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest
|
||||
your rights to work written entirely by you; rather, the intent is to
|
||||
exercise the right to control the distribution of derivative or
|
||||
collective works based on the Program.
|
||||
|
||||
In addition, mere aggregation of another work not based on the Program
|
||||
with the Program (or with a work based on the Program) on a volume of
|
||||
a storage or distribution medium does not bring the other work under
|
||||
the scope of this License.
|
||||
|
||||
3. You may copy and distribute the Program (or a work based on it,
|
||||
under Section 2) in object code or executable form under the terms of
|
||||
Sections 1 and 2 above provided that you also do one of the following:
|
||||
|
||||
a) Accompany it with the complete corresponding machine-readable
|
||||
source code, which must be distributed under the terms of Sections
|
||||
1 and 2 above on a medium customarily used for software interchange; or,
|
||||
|
||||
b) Accompany it with a written offer, valid for at least three
|
||||
years, to give any third party, for a charge no more than your
|
||||
cost of physically performing source distribution, a complete
|
||||
machine-readable copy of the corresponding source code, to be
|
||||
distributed under the terms of Sections 1 and 2 above on a medium
|
||||
customarily used for software interchange; or,
|
||||
|
||||
c) Accompany it with the information you received as to the offer
|
||||
to distribute corresponding source code. (This alternative is
|
||||
allowed only for noncommercial distribution and only if you
|
||||
received the program in object code or executable form with such
|
||||
an offer, in accord with Subsection b above.)
|
||||
|
||||
The source code for a work means the preferred form of the work for
|
||||
making modifications to it. For an executable work, complete source
|
||||
code means all the source code for all modules it contains, plus any
|
||||
associated interface definition files, plus the scripts used to
|
||||
control compilation and installation of the executable. However, as a
|
||||
special exception, the source code distributed need not include
|
||||
anything that is normally distributed (in either source or binary
|
||||
form) with the major components (compiler, kernel, and so on) of the
|
||||
operating system on which the executable runs, unless that component
|
||||
itself accompanies the executable.
|
||||
|
||||
If distribution of executable or object code is made by offering
|
||||
access to copy from a designated place, then offering equivalent
|
||||
access to copy the source code from the same place counts as
|
||||
distribution of the source code, even though third parties are not
|
||||
compelled to copy the source along with the object code.
|
||||
|
||||
4. You may not copy, modify, sublicense, or distribute the Program
|
||||
except as expressly provided under this License. Any attempt
|
||||
otherwise to copy, modify, sublicense or distribute the Program is
|
||||
void, and will automatically terminate your rights under this License.
|
||||
However, parties who have received copies, or rights, from you under
|
||||
this License will not have their licenses terminated so long as such
|
||||
parties remain in full compliance.
|
||||
|
||||
5. You are not required to accept this License, since you have not
|
||||
signed it. However, nothing else grants you permission to modify or
|
||||
distribute the Program or its derivative works. These actions are
|
||||
prohibited by law if you do not accept this License. Therefore, by
|
||||
modifying or distributing the Program (or any work based on the
|
||||
Program), you indicate your acceptance of this License to do so, and
|
||||
all its terms and conditions for copying, distributing or modifying
|
||||
the Program or works based on it.
|
||||
|
||||
6. Each time you redistribute the Program (or any work based on the
|
||||
Program), the recipient automatically receives a license from the
|
||||
original licensor to copy, distribute or modify the Program subject to
|
||||
these terms and conditions. You may not impose any further
|
||||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties to
|
||||
this License.
|
||||
|
||||
7. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
otherwise) that contradict the conditions of this License, they do not
|
||||
excuse you from the conditions of this License. If you cannot
|
||||
distribute so as to satisfy simultaneously your obligations under this
|
||||
License and any other pertinent obligations, then as a consequence you
|
||||
may not distribute the Program at all. For example, if a patent
|
||||
license would not permit royalty-free redistribution of the Program by
|
||||
all those who receive copies directly or indirectly through you, then
|
||||
the only way you could satisfy both it and this License would be to
|
||||
refrain entirely from distribution of the Program.
|
||||
|
||||
If any portion of this section is held invalid or unenforceable under
|
||||
any particular circumstance, the balance of the section is intended to
|
||||
apply and the section as a whole is intended to apply in other
|
||||
circumstances.
|
||||
|
||||
It is not the purpose of this section to induce you to infringe any
|
||||
patents or other property right claims or to contest validity of any
|
||||
such claims; this section has the sole purpose of protecting the
|
||||
integrity of the free software distribution system, which is
|
||||
implemented by public license practices. Many people have made
|
||||
generous contributions to the wide range of software distributed
|
||||
through that system in reliance on consistent application of that
|
||||
system; it is up to the author/donor to decide if he or she is willing
|
||||
to distribute software through any other system and a licensee cannot
|
||||
impose that choice.
|
||||
|
||||
This section is intended to make thoroughly clear what is believed to
|
||||
be a consequence of the rest of this License.
|
||||
|
||||
8. If the distribution and/or use of the Program is restricted in
|
||||
certain countries either by patents or by copyrighted interfaces, the
|
||||
original copyright holder who places the Program under this License
|
||||
may add an explicit geographical distribution limitation excluding
|
||||
those countries, so that distribution is permitted only in or among
|
||||
countries not thus excluded. In such case, this License incorporates
|
||||
the limitation as if written in the body of this License.
|
||||
|
||||
9. The Free Software Foundation may publish revised and/or new versions
|
||||
of the General Public License from time to time. Such new versions will
|
||||
be similar in spirit to the present version, but may differ in detail to
|
||||
address new problems or concerns.
|
||||
|
||||
Each version is given a distinguishing version number. If the Program
|
||||
specifies a version number of this License which applies to it and "any
|
||||
later version", you have the option of following the terms and conditions
|
||||
either of that version or of any later version published by the Free
|
||||
Software Foundation. If the Program does not specify a version number of
|
||||
this License, you may choose any version ever published by the Free Software
|
||||
Foundation.
|
||||
|
||||
10. If you wish to incorporate parts of the Program into other free
|
||||
programs whose distribution conditions are different, write to the author
|
||||
to ask for permission. For software which is copyrighted by the Free
|
||||
Software Foundation, write to the Free Software Foundation; we sometimes
|
||||
make exceptions for this. Our decision will be guided by the two goals
|
||||
of preserving the free status of all derivatives of our free software and
|
||||
of promoting the sharing and reuse of software generally.
|
||||
|
||||
NO WARRANTY
|
||||
|
||||
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
||||
REPAIR OR CORRECTION.
|
||||
|
||||
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
How to Apply These Terms to Your New Programs
|
||||
|
||||
If you develop a new program, and you want it to be of the greatest
|
||||
possible use to the public, the best way to achieve this is to make it
|
||||
free software which everyone can redistribute and change under these terms.
|
||||
|
||||
To do so, attach the following notices to the program. It is safest
|
||||
to attach them to the start of each source file to most effectively
|
||||
convey the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
{description}
|
||||
Copyright (C) {year} {fullname}
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License along
|
||||
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
If the program is interactive, make it output a short notice like this
|
||||
when it starts in an interactive mode:
|
||||
|
||||
Gnomovision version 69, Copyright (C) year name of author
|
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions; type `show c' for details.
|
||||
|
||||
The hypothetical commands `show w' and `show c' should show the appropriate
|
||||
parts of the General Public License. Of course, the commands you use may
|
||||
be called something other than `show w' and `show c'; they could even be
|
||||
mouse-clicks or menu items--whatever suits your program.
|
||||
|
||||
You should also get your employer (if you work as a programmer) or your
|
||||
school, if any, to sign a "copyright disclaimer" for the program, if
|
||||
necessary. Here is a sample; alter the names:
|
||||
|
||||
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
||||
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
||||
|
||||
{signature of Ty Coon}, 1 April 1989
|
||||
Ty Coon, President of Vice
|
||||
|
||||
This General Public License does not permit incorporating your program into
|
||||
proprietary programs. If your program is a subroutine library, you may
|
||||
consider it more useful to permit linking proprietary applications with the
|
||||
library. If this is what you want to do, use the GNU Lesser General
|
||||
Public License instead of this License.
|
||||
|
103
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/README.html
vendored
Normal file
@ -0,0 +1,103 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" lang="en">
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1 id="svg-sanitizer">svg-sanitizer</h1>
|
||||
|
||||
<p><a href="https://travis-ci.org/darylldoyle/svg-sanitizer"><img src="https://travis-ci.org/darylldoyle/svg-sanitizer.svg?branch=master" alt="Build Status" /></a> <a href="https://codeclimate.com/github/darylldoyle/svg-sanitizer/coverage"><img src="https://codeclimate.com/github/darylldoyle/svg-sanitizer/badges/coverage.svg" alt="Test Coverage" /></a></p>
|
||||
|
||||
<p>This is my attempt at building a decent SVG sanitizer in PHP. The work is laregely borrowed from <a href="https://github.com/cure53/DOMPurify">DOMPurify</a>.</p>
|
||||
|
||||
<h2 id="installation">Installation</h2>
|
||||
|
||||
<p>Either require <code>enshrined/svg-sanitize</code> through composer or download the repo and include the old way!</p>
|
||||
|
||||
<h2 id="usage">Usage</h2>
|
||||
|
||||
<p>Using this is fairly easy. Create a new instance of <code>enshrined\svgSanitize\Sanitizer</code> and then call the <code>sanitize</code> whilst passing in your dirty SVG/XML</p>
|
||||
|
||||
<p><strong>Basic Example</strong></p>
|
||||
|
||||
<pre><code class="php">use enshrined\svgSanitize\Sanitizer;
|
||||
|
||||
// Create a new sanitizer instance
|
||||
$sanitizer = new Sanitizer();
|
||||
|
||||
// Load the dirty svg
|
||||
$dirtySVG = file_get_contents('filthy.svg');
|
||||
|
||||
// Pass it to the sanitizer and get it back clean
|
||||
$cleanSVG = $sanitizer->sanitize($dirtySVG);
|
||||
|
||||
// Now do what you want with your clean SVG/XML data
|
||||
|
||||
</code></pre>
|
||||
|
||||
<h2 id="output">Output</h2>
|
||||
|
||||
<p>This will either return a sanitized SVG/XML string or boolean <code>false</code> if XML parsing failed (usually due to a badly formatted file).</p>
|
||||
|
||||
<h2 id="options">Options</h2>
|
||||
|
||||
<p>You may pass your own whitelist of tags and attributes by using the <code>Sanitizer::setAllowedTags</code> and <code>Sanitizer::setAllowedAttrs</code> methods respectively.</p>
|
||||
|
||||
<p>These methods require that you implement the <code>enshrined\svgSanitize\data\TagInterface</code> or <code>enshrined\svgSanitize\data\AttributeInterface</code>.</p>
|
||||
|
||||
<h2 id="removeremotereferences">Remove remote references</h2>
|
||||
|
||||
<p>You have the option to remove attributes that reference remote files, this will stop HTTP leaks but will add an overhead to the sanitizer.</p>
|
||||
|
||||
<p>This defaults to false, set to true to remove references.</p>
|
||||
|
||||
<p><code>$sanitizer->removeRemoteReferences(true);</code></p>
|
||||
|
||||
<h2 id="viewingsanitizationissues">Viewing Sanitization Issues</h2>
|
||||
|
||||
<p>You may use the <code>getXmlIssues()</code> method to return an array of issues that occurred during sanitization.</p>
|
||||
|
||||
<p>This may be useful for logging or providing feedback to the user on why an SVG was refused.</p>
|
||||
|
||||
<p><code>$issues = $sanitizer->getXmlIssues();</code></p>
|
||||
|
||||
<h2 id="minification">Minification</h2>
|
||||
|
||||
<p>You can minify the XML output by calling <code>$sanitizer->minify(true);</code>.</p>
|
||||
|
||||
<h2 id="demo">Demo</h2>
|
||||
|
||||
<p>There is a demo available at: <a href="http://svg.enshrined.co.uk/">http://svg.enshrined.co.uk/</a></p>
|
||||
|
||||
<h2 id="wordpress">WordPress</h2>
|
||||
|
||||
<p>I’ve just released a WordPress plugin containing this code so you can sanitize your WordPress uploads. It’s available from the WordPress plugin directory: <a href="https://wordpress.org/plugins/safe-svg/">https://wordpress.org/plugins/safe-svg/</a></p>
|
||||
|
||||
<h2 id="drupal">Drupal</h2>
|
||||
|
||||
<p><a href="https://github.com/heyMP">Michael Potter</a> has kindly created a Drupal module for this library which is available at: <a href="https://www.drupal.org/project/svg_sanitizer">https://www.drupal.org/project/svg_sanitizer</a></p>
|
||||
|
||||
<h2 id="typo3">TYPO3</h2>
|
||||
|
||||
<p>An integration for TYPO3 CMS of this library is available as composer package <code>t3g/svg-sanitizer</code> at <a href="https://github.com/TYPO3GmbH/svg_sanitizer">https://github.com/TYPO3GmbH/svg_sanitizer</a></p>
|
||||
|
||||
<h2 id="tests">Tests</h2>
|
||||
|
||||
<p>You can run these by running <code>vendor/bin/phpunit</code> from the base directory of this package.</p>
|
||||
|
||||
<h2 id="standalonescanningoffilesviacli">Standalone scanning of files via CLI</h2>
|
||||
|
||||
<p>Thanks to the work by <a href="https://github.com/gudmdharalds">gudmdharalds</a> there’s now a standalone scanner that can be used via the CLI.</p>
|
||||
|
||||
<p>Any errors will be output in JSON format. See <a href="https://github.com/darylldoyle/svg-sanitizer/pull/25">the PR</a> for an example.</p>
|
||||
|
||||
<p>Use it as follows: <code>php svg-scanner.php ~/svgs/myfile.svg</code></p>
|
||||
|
||||
<h2 id="to-do">To-Do</h2>
|
||||
|
||||
<p>More extensive testing for the SVGs/XML would be lovely, I’ll try and add these soon. If you feel like doing it for me, please do and make a PR!</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
92
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/README.md
vendored
Normal file
@ -0,0 +1,92 @@
|
||||
# svg-sanitizer
|
||||
|
||||
[](https://travis-ci.org/darylldoyle/svg-sanitizer) [](https://codeclimate.com/github/darylldoyle/svg-sanitizer/coverage)
|
||||
|
||||
This is my attempt at building a decent SVG sanitizer in PHP. The work is laregely borrowed from [DOMPurify](https://github.com/cure53/DOMPurify).
|
||||
|
||||
## Installation
|
||||
|
||||
Either require `enshrined/svg-sanitize` through composer or download the repo and include the old way!
|
||||
|
||||
## Usage
|
||||
|
||||
Using this is fairly easy. Create a new instance of `enshrined\svgSanitize\Sanitizer` and then call the `sanitize` whilst passing in your dirty SVG/XML
|
||||
|
||||
**Basic Example**
|
||||
|
||||
```php
|
||||
use enshrined\svgSanitize\Sanitizer;
|
||||
|
||||
// Create a new sanitizer instance
|
||||
$sanitizer = new Sanitizer();
|
||||
|
||||
// Load the dirty svg
|
||||
$dirtySVG = file_get_contents('filthy.svg');
|
||||
|
||||
// Pass it to the sanitizer and get it back clean
|
||||
$cleanSVG = $sanitizer->sanitize($dirtySVG);
|
||||
|
||||
// Now do what you want with your clean SVG/XML data
|
||||
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
This will either return a sanitized SVG/XML string or boolean `false` if XML parsing failed (usually due to a badly formatted file).
|
||||
|
||||
## Options
|
||||
|
||||
You may pass your own whitelist of tags and attributes by using the `Sanitizer::setAllowedTags` and `Sanitizer::setAllowedAttrs` methods respectively.
|
||||
|
||||
These methods require that you implement the `enshrined\svgSanitize\data\TagInterface` or `enshrined\svgSanitize\data\AttributeInterface`.
|
||||
|
||||
## Remove remote references
|
||||
|
||||
You have the option to remove attributes that reference remote files, this will stop HTTP leaks but will add an overhead to the sanitizer.
|
||||
|
||||
This defaults to false, set to true to remove references.
|
||||
|
||||
`$sanitizer->removeRemoteReferences(true);`
|
||||
|
||||
## Viewing Sanitization Issues
|
||||
|
||||
You may use the `getXmlIssues()` method to return an array of issues that occurred during sanitization.
|
||||
|
||||
This may be useful for logging or providing feedback to the user on why an SVG was refused.
|
||||
|
||||
`$issues = $sanitizer->getXmlIssues();`
|
||||
|
||||
## Minification
|
||||
|
||||
You can minify the XML output by calling `$sanitizer->minify(true);`.
|
||||
|
||||
## Demo
|
||||
There is a demo available at: [http://svg.enshrined.co.uk/](http://svg.enshrined.co.uk/)
|
||||
|
||||
## WordPress
|
||||
|
||||
I've just released a WordPress plugin containing this code so you can sanitize your WordPress uploads. It's available from the WordPress plugin directory: [https://wordpress.org/plugins/safe-svg/](https://wordpress.org/plugins/safe-svg/)
|
||||
|
||||
## Drupal
|
||||
|
||||
[Michael Potter](https://github.com/heyMP) has kindly created a Drupal module for this library which is available at: [https://www.drupal.org/project/svg_sanitizer](https://www.drupal.org/project/svg_sanitizer)
|
||||
|
||||
## TYPO3
|
||||
|
||||
An integration for TYPO3 CMS of this library is available as composer package `t3g/svg-sanitizer` at [https://github.com/TYPO3GmbH/svg_sanitizer](https://github.com/TYPO3GmbH/svg_sanitizer)
|
||||
|
||||
## Tests
|
||||
|
||||
You can run these by running `vendor/bin/phpunit` from the base directory of this package.
|
||||
|
||||
## Standalone scanning of files via CLI
|
||||
|
||||
Thanks to the work by [gudmdharalds](https://github.com/gudmdharalds) there's now a standalone scanner that can be used via the CLI.
|
||||
|
||||
Any errors will be output in JSON format. See [the PR](https://github.com/darylldoyle/svg-sanitizer/pull/25) for an example.
|
||||
|
||||
Use it as follows: `php svg-scanner.php ~/svgs/myfile.svg`
|
||||
|
||||
## To-Do
|
||||
|
||||
More extensive testing for the SVGs/XML would be lovely, I'll try and add these soon. If you feel like doing it for me, please do and make a PR!
|
33
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/composer.json
vendored
Normal file
@ -0,0 +1,33 @@
|
||||
{
|
||||
"name": "enshrined/svg-sanitize",
|
||||
"description": "An SVG sanitizer for PHP",
|
||||
"license": "GPL-2.0-or-later",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Daryll Doyle",
|
||||
"email": "daryll@enshrined.co.uk"
|
||||
}
|
||||
],
|
||||
"scripts": {
|
||||
"test": "phpunit --no-coverage"
|
||||
},
|
||||
"autoload": {
|
||||
"psr-4": {
|
||||
"enshrined\\svgSanitize\\": "src"
|
||||
}
|
||||
},
|
||||
"autoload-dev": {
|
||||
"psr-4": {
|
||||
"enshrined\\svgSanitize\\Tests\\": "tests"
|
||||
}
|
||||
},
|
||||
"require": {
|
||||
"ext-dom": "*",
|
||||
"ext-libxml": "*",
|
||||
"php": "^7.0 || ^8.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^6.5 || ^8.5",
|
||||
"codeclimate/php-test-reporter": "^0.1.2"
|
||||
}
|
||||
}
|
21
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/phpunit.xml
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<phpunit bootstrap="vendor/autoload.php"
|
||||
colors="true"
|
||||
stopOnFailure="false">
|
||||
|
||||
<testsuites>
|
||||
<testsuite name="The project's test suite">
|
||||
<directory>./tests</directory>
|
||||
</testsuite>
|
||||
</testsuites>
|
||||
|
||||
<logging>
|
||||
<log type="coverage-clover" target="./build/logs/clover.xml"/>
|
||||
</logging>
|
||||
|
||||
<filter>
|
||||
<whitelist addUncoveredFilesFromWhitelist="true">
|
||||
<directory suffix=".php">./src</directory>
|
||||
</whitelist>
|
||||
</filter>
|
||||
</phpunit>
|
169
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/ElementReference/Resolver.php
vendored
Normal file
@ -0,0 +1,169 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\ElementReference;
|
||||
|
||||
use enshrined\svgSanitize\data\XPath;
|
||||
use enshrined\svgSanitize\Exceptions\NestingException;
|
||||
use enshrined\svgSanitize\Helper;
|
||||
|
||||
class Resolver
|
||||
{
|
||||
/**
|
||||
* @var XPath
|
||||
*/
|
||||
protected $xPath;
|
||||
|
||||
/**
|
||||
* @var Subject[]
|
||||
*/
|
||||
protected $subjects = [];
|
||||
|
||||
/**
|
||||
* @var array DOMElement[]
|
||||
*/
|
||||
protected $elementsToRemove = [];
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $useNestingLimit;
|
||||
|
||||
public function __construct(XPath $xPath, $useNestingLimit)
|
||||
{
|
||||
$this->xPath = $xPath;
|
||||
$this->useNestingLimit = $useNestingLimit;
|
||||
}
|
||||
|
||||
public function collect()
|
||||
{
|
||||
$this->collectIdentifiedElements();
|
||||
$this->processReferences();
|
||||
$this->determineInvalidSubjects();
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves one subject by element.
|
||||
*
|
||||
* @param \DOMElement $element
|
||||
* @param bool $considerChildren Whether to search in Subject's children as well
|
||||
* @return Subject|null
|
||||
*/
|
||||
public function findByElement(\DOMElement $element, $considerChildren = false)
|
||||
{
|
||||
foreach ($this->subjects as $subject) {
|
||||
if (
|
||||
$element === $subject->getElement()
|
||||
|| $considerChildren && Helper::isElementContainedIn($element, $subject->getElement())
|
||||
) {
|
||||
return $subject;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolves subjects (plural!) by element id - in theory malformed
|
||||
* DOM might have same ids assigned to different elements and leaving
|
||||
* it to client/browser implementation which element to actually use.
|
||||
*
|
||||
* @param string $elementId
|
||||
* @return Subject[]
|
||||
*/
|
||||
public function findByElementId($elementId)
|
||||
{
|
||||
return array_filter(
|
||||
$this->subjects,
|
||||
function (Subject $subject) use ($elementId) {
|
||||
return $elementId === $subject->getElementId();
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Collects elements having `id` attribute (those that can be referenced).
|
||||
*/
|
||||
protected function collectIdentifiedElements()
|
||||
{
|
||||
/** @var \DOMNodeList|\DOMElement[] $elements */
|
||||
$elements = $this->xPath->query('//*[@id]');
|
||||
foreach ($elements as $element) {
|
||||
$this->subjects[$element->getAttribute('id')] = new Subject($element, $this->useNestingLimit);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Processes references from and to elements having `id` attribute concerning
|
||||
* their occurrence in `<use ... xlink:href="#identifier">` statements.
|
||||
*/
|
||||
protected function processReferences()
|
||||
{
|
||||
$useNodeName = $this->xPath->createNodeName('use');
|
||||
foreach ($this->subjects as $subject) {
|
||||
$useElements = $this->xPath->query(
|
||||
$useNodeName . '[@href or @xlink:href]',
|
||||
$subject->getElement()
|
||||
);
|
||||
|
||||
/** @var \DOMElement $useElement */
|
||||
foreach ($useElements as $useElement) {
|
||||
$useId = Helper::extractIdReferenceFromHref(
|
||||
Helper::getElementHref($useElement)
|
||||
);
|
||||
if ($useId === null || !isset($this->subjects[$useId])) {
|
||||
continue;
|
||||
}
|
||||
$subject->addUse($this->subjects[$useId]);
|
||||
$this->subjects[$useId]->addUsedIn($subject);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines and tags infinite loops.
|
||||
*/
|
||||
protected function determineInvalidSubjects()
|
||||
{
|
||||
foreach ($this->subjects as $subject) {
|
||||
|
||||
if (in_array($subject->getElement(), $this->elementsToRemove)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$useId = Helper::extractIdReferenceFromHref(
|
||||
Helper::getElementHref($subject->getElement())
|
||||
);
|
||||
|
||||
try {
|
||||
if ($useId === $subject->getElementId()) {
|
||||
$this->markSubjectAsInvalid($subject);
|
||||
} elseif ($subject->hasInfiniteLoop()) {
|
||||
$this->markSubjectAsInvalid($subject);
|
||||
}
|
||||
} catch (NestingException $e) {
|
||||
$this->elementsToRemove[] = $e->getElement();
|
||||
$this->markSubjectAsInvalid($subject);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all the elements that caused a nesting exception.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getElementsToRemove() {
|
||||
return $this->elementsToRemove;
|
||||
}
|
||||
|
||||
/**
|
||||
* The Subject is invalid for some reason, therefore we should
|
||||
* remove it and all it's child usages.
|
||||
*
|
||||
* @param Subject $subject
|
||||
*/
|
||||
protected function markSubjectAsInvalid(Subject $subject) {
|
||||
$this->elementsToRemove = array_merge(
|
||||
$this->elementsToRemove,
|
||||
$subject->clearInternalAndGetAffectedElements()
|
||||
);
|
||||
}
|
||||
}
|
153
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/ElementReference/Subject.php
vendored
Normal file
@ -0,0 +1,153 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\ElementReference;
|
||||
|
||||
class Subject
|
||||
{
|
||||
/**
|
||||
* @var \DOMElement
|
||||
*/
|
||||
protected $element;
|
||||
|
||||
/**
|
||||
* @var Usage[]
|
||||
*/
|
||||
protected $useCollection = [];
|
||||
|
||||
/**
|
||||
* @var Usage[]
|
||||
*/
|
||||
protected $usedInCollection = [];
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $useNestingLimit;
|
||||
|
||||
/**
|
||||
* Subject constructor.
|
||||
*
|
||||
* @param \DOMElement $element
|
||||
* @param int $useNestingLimit
|
||||
*/
|
||||
public function __construct(\DOMElement $element, $useNestingLimit)
|
||||
{
|
||||
$this->element = $element;
|
||||
$this->useNestingLimit = $useNestingLimit;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \DOMElement
|
||||
*/
|
||||
public function getElement()
|
||||
{
|
||||
return $this->element;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getElementId()
|
||||
{
|
||||
return $this->element->getAttribute('id');
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $subjects Previously processed subjects
|
||||
* @param int $level The current level of nesting.
|
||||
* @return bool
|
||||
* @throws \enshrined\svgSanitize\Exceptions\NestingException
|
||||
*/
|
||||
public function hasInfiniteLoop(array $subjects = [], $level = 1)
|
||||
{
|
||||
if ($level > $this->useNestingLimit) {
|
||||
throw new \enshrined\svgSanitize\Exceptions\NestingException('Nesting level too high, aborting', 1570713498, null, $this->getElement());
|
||||
}
|
||||
|
||||
if (in_array($this, $subjects, true)) {
|
||||
return true;
|
||||
}
|
||||
$subjects[] = $this;
|
||||
foreach ($this->useCollection as $usage) {
|
||||
if ($usage->getSubject()->hasInfiniteLoop($subjects, $level + 1)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Subject $subject
|
||||
*/
|
||||
public function addUse(Subject $subject)
|
||||
{
|
||||
if ($subject === $this) {
|
||||
throw new \LogicException('Cannot add self usage', 1570713416);
|
||||
}
|
||||
$identifier = $subject->getElementId();
|
||||
if (isset($this->useCollection[$identifier])) {
|
||||
$this->useCollection[$identifier]->increment();
|
||||
return;
|
||||
}
|
||||
$this->useCollection[$identifier] = new Usage($subject);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param Subject $subject
|
||||
*/
|
||||
public function addUsedIn(Subject $subject)
|
||||
{
|
||||
if ($subject === $this) {
|
||||
throw new \LogicException('Cannot add self as usage', 1570713417);
|
||||
}
|
||||
$identifier = $subject->getElementId();
|
||||
if (isset($this->usedInCollection[$identifier])) {
|
||||
$this->usedInCollection[$identifier]->increment();
|
||||
return;
|
||||
}
|
||||
$this->usedInCollection[$identifier] = new Usage($subject);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $accumulated
|
||||
* @return int
|
||||
*/
|
||||
public function countUse($accumulated = false)
|
||||
{
|
||||
$count = 0;
|
||||
foreach ($this->useCollection as $use) {
|
||||
$useCount = $use->getSubject()->countUse();
|
||||
$count += $use->getCount() * ($accumulated ? 1 + $useCount : max(1, $useCount));
|
||||
}
|
||||
return $count;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function countUsedIn()
|
||||
{
|
||||
$count = 0;
|
||||
foreach ($this->usedInCollection as $usedIn) {
|
||||
$count += $usedIn->getCount() * max(1, $usedIn->getSubject()->countUsedIn());
|
||||
}
|
||||
return $count;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the internal arrays (to free up memory as they can get big)
|
||||
* and return all the child usages DOMElement's
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function clearInternalAndGetAffectedElements()
|
||||
{
|
||||
$elements = array_map(function(Usage $usage) {
|
||||
return $usage->getSubject()->getElement();
|
||||
}, $this->useCollection);
|
||||
|
||||
$this->usedInCollection = [];
|
||||
$this->useCollection = [];
|
||||
|
||||
return $elements;
|
||||
}
|
||||
}
|
49
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/ElementReference/Usage.php
vendored
Normal file
@ -0,0 +1,49 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\ElementReference;
|
||||
|
||||
class Usage
|
||||
{
|
||||
/**
|
||||
* @var Subject
|
||||
*/
|
||||
protected $subject;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $count;
|
||||
|
||||
/**
|
||||
* @param Subject $subject
|
||||
* @param int $count
|
||||
*/
|
||||
public function __construct(Subject $subject, $count = 1)
|
||||
{
|
||||
$this->subject = $subject;
|
||||
$this->count = (int)$count;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $by
|
||||
*/
|
||||
public function increment($by = 1)
|
||||
{
|
||||
$this->count += (int)$by;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Subject
|
||||
*/
|
||||
public function getSubject()
|
||||
{
|
||||
return $this->subject;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getCount()
|
||||
{
|
||||
return $this->count;
|
||||
}
|
||||
}
|
39
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/Exceptions/NestingException.php
vendored
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace enshrined\svgSanitize\Exceptions;
|
||||
|
||||
|
||||
use Exception;
|
||||
|
||||
class NestingException extends \Exception
|
||||
{
|
||||
/**
|
||||
* @var \DOMElement
|
||||
*/
|
||||
protected $element;
|
||||
|
||||
/**
|
||||
* NestingException constructor.
|
||||
*
|
||||
* @param string $message
|
||||
* @param int $code
|
||||
* @param Exception|null $previous
|
||||
* @param \DOMElement|null $element
|
||||
*/
|
||||
public function __construct($message = "", $code = 0, Exception $previous = null, \DOMElement $element = null)
|
||||
{
|
||||
$this->element = $element;
|
||||
parent::__construct($message, $code, $previous);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the element that caused the exception.
|
||||
*
|
||||
* @return \DOMElement
|
||||
*/
|
||||
public function getElement()
|
||||
{
|
||||
return $this->element;
|
||||
}
|
||||
}
|
53
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/Helper.php
vendored
Normal file
@ -0,0 +1,53 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize;
|
||||
|
||||
class Helper
|
||||
{
|
||||
/**
|
||||
* @param \DOMElement $element
|
||||
* @return string|null
|
||||
*/
|
||||
public static function getElementHref(\DOMElement $element)
|
||||
{
|
||||
if ($element->hasAttribute('href')) {
|
||||
return $element->getAttribute('href');
|
||||
}
|
||||
if ($element->hasAttributeNS('http://www.w3.org/1999/xlink', 'href')) {
|
||||
return $element->getAttributeNS('http://www.w3.org/1999/xlink', 'href');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $href
|
||||
* @return string|null
|
||||
*/
|
||||
public static function extractIdReferenceFromHref($href)
|
||||
{
|
||||
if (!is_string($href) || strpos($href, '#') !== 0) {
|
||||
return null;
|
||||
}
|
||||
return substr($href, 1);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param \DOMElement $needle
|
||||
* @param \DOMElement $haystack
|
||||
* @return bool
|
||||
*/
|
||||
public static function isElementContainedIn(\DOMElement $needle, \DOMElement $haystack)
|
||||
{
|
||||
if ($needle === $haystack) {
|
||||
return true;
|
||||
}
|
||||
foreach ($haystack->childNodes as $childNode) {
|
||||
if (!$childNode instanceof \DOMElement) {
|
||||
continue;
|
||||
}
|
||||
if (self::isElementContainedIn($needle, $childNode)) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
630
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/Sanitizer.php
vendored
Normal file
@ -0,0 +1,630 @@
|
||||
<?php
|
||||
|
||||
namespace enshrined\svgSanitize;
|
||||
|
||||
use enshrined\svgSanitize\data\AllowedAttributes;
|
||||
use enshrined\svgSanitize\data\AllowedTags;
|
||||
use enshrined\svgSanitize\data\AttributeInterface;
|
||||
use enshrined\svgSanitize\data\TagInterface;
|
||||
use enshrined\svgSanitize\data\XPath;
|
||||
use enshrined\svgSanitize\ElementReference\Resolver;
|
||||
use enshrined\svgSanitize\ElementReference\Subject;
|
||||
|
||||
/**
|
||||
* Class Sanitizer
|
||||
*
|
||||
* @package enshrined\svgSanitize
|
||||
*/
|
||||
class Sanitizer
|
||||
{
|
||||
|
||||
/**
|
||||
* @var \DOMDocument
|
||||
*/
|
||||
protected $xmlDocument;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $allowedTags;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $allowedAttrs;
|
||||
|
||||
/**
|
||||
* @var
|
||||
*/
|
||||
protected $xmlLoaderValue;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $minifyXML = false;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $removeRemoteReferences = false;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $useThreshold = 1000;
|
||||
|
||||
/**
|
||||
* @var bool
|
||||
*/
|
||||
protected $removeXMLTag = false;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $xmlOptions = LIBXML_NOEMPTYTAG;
|
||||
|
||||
/**
|
||||
* @var array
|
||||
*/
|
||||
protected $xmlIssues = array();
|
||||
|
||||
/**
|
||||
* @var Resolver
|
||||
*/
|
||||
protected $elementReferenceResolver;
|
||||
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $useNestingLimit = 15;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
function __construct()
|
||||
{
|
||||
// Load default tags/attributes
|
||||
$this->allowedAttrs = array_map('strtolower', AllowedAttributes::getAttributes());
|
||||
$this->allowedTags = array_map('strtolower', AllowedTags::getTags());
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up the DOMDocument
|
||||
*/
|
||||
protected function resetInternal()
|
||||
{
|
||||
$this->xmlDocument = new \DOMDocument();
|
||||
$this->xmlDocument->preserveWhiteSpace = false;
|
||||
$this->xmlDocument->strictErrorChecking = false;
|
||||
$this->xmlDocument->formatOutput = !$this->minifyXML;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set XML options to use when saving XML
|
||||
* See: DOMDocument::saveXML
|
||||
*
|
||||
* @param int $xmlOptions
|
||||
*/
|
||||
public function setXMLOptions($xmlOptions)
|
||||
{
|
||||
$this->xmlOptions = $xmlOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get XML options to use when saving XML
|
||||
* See: DOMDocument::saveXML
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function getXMLOptions()
|
||||
{
|
||||
return $this->xmlOptions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array of allowed tags
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getAllowedTags()
|
||||
{
|
||||
return $this->allowedTags;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set custom allowed tags
|
||||
*
|
||||
* @param TagInterface $allowedTags
|
||||
*/
|
||||
public function setAllowedTags(TagInterface $allowedTags)
|
||||
{
|
||||
$this->allowedTags = array_map('strtolower', $allowedTags::getTags());
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the array of allowed attributes
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getAllowedAttrs()
|
||||
{
|
||||
return $this->allowedAttrs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set custom allowed attributes
|
||||
*
|
||||
* @param AttributeInterface $allowedAttrs
|
||||
*/
|
||||
public function setAllowedAttrs(AttributeInterface $allowedAttrs)
|
||||
{
|
||||
$this->allowedAttrs = array_map('strtolower', $allowedAttrs::getAttributes());
|
||||
}
|
||||
|
||||
/**
|
||||
* Should we remove references to remote files?
|
||||
*
|
||||
* @param bool $removeRemoteRefs
|
||||
*/
|
||||
public function removeRemoteReferences($removeRemoteRefs = false)
|
||||
{
|
||||
$this->removeRemoteReferences = $removeRemoteRefs;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get XML issues.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function getXmlIssues() {
|
||||
return $this->xmlIssues;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Sanitize the passed string
|
||||
*
|
||||
* @param string $dirty
|
||||
* @return string
|
||||
*/
|
||||
public function sanitize($dirty)
|
||||
{
|
||||
// Don't run on an empty string
|
||||
if (empty($dirty)) {
|
||||
return '';
|
||||
}
|
||||
|
||||
// Strip php tags
|
||||
$dirty = preg_replace('/<\?(=|php)(.+?)\?>/i', '', $dirty);
|
||||
|
||||
$this->resetInternal();
|
||||
$this->setUpBefore();
|
||||
|
||||
$loaded = $this->xmlDocument->loadXML($dirty);
|
||||
|
||||
// If we couldn't parse the XML then we go no further. Reset and return false
|
||||
if (!$loaded) {
|
||||
$this->resetAfter();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Pre-process all identified elements
|
||||
$xPath = new XPath($this->xmlDocument);
|
||||
$this->elementReferenceResolver = new Resolver($xPath, $this->useNestingLimit);
|
||||
$this->elementReferenceResolver->collect();
|
||||
$elementsToRemove = $this->elementReferenceResolver->getElementsToRemove();
|
||||
|
||||
// Grab all the elements
|
||||
$allElements = $this->xmlDocument->getElementsByTagName("*");
|
||||
|
||||
// remove doctype after node elements have been analyzed
|
||||
$this->removeDoctype();
|
||||
// Start the cleaning proccess
|
||||
$this->startClean($allElements, $elementsToRemove);
|
||||
|
||||
// Save cleaned XML to a variable
|
||||
if ($this->removeXMLTag) {
|
||||
$clean = $this->xmlDocument->saveXML($this->xmlDocument->documentElement, $this->xmlOptions);
|
||||
} else {
|
||||
$clean = $this->xmlDocument->saveXML($this->xmlDocument, $this->xmlOptions);
|
||||
}
|
||||
|
||||
$this->resetAfter();
|
||||
|
||||
// Remove any extra whitespaces when minifying
|
||||
if ($this->minifyXML) {
|
||||
$clean = preg_replace('/\s+/', ' ', $clean);
|
||||
}
|
||||
|
||||
// Return result
|
||||
return $clean;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set up libXML before we start
|
||||
*/
|
||||
protected function setUpBefore()
|
||||
{
|
||||
// This function has been deprecated in PHP 8.0 because in libxml 2.9.0, external entity loading is
|
||||
// disabled by default, so this function is no longer needed to protect against XXE attacks.
|
||||
if (\LIBXML_VERSION < 20900) {
|
||||
// Turn off the entity loader
|
||||
$this->xmlLoaderValue = libxml_disable_entity_loader(true);
|
||||
}
|
||||
|
||||
// Suppress the errors because we don't really have to worry about formation before cleansing
|
||||
libxml_use_internal_errors(true);
|
||||
|
||||
// Reset array of altered XML
|
||||
$this->xmlIssues = array();
|
||||
}
|
||||
|
||||
/**
|
||||
* Reset the class after use
|
||||
*/
|
||||
protected function resetAfter()
|
||||
{
|
||||
// This function has been deprecated in PHP 8.0 because in libxml 2.9.0, external entity loading is
|
||||
// disabled by default, so this function is no longer needed to protect against XXE attacks.
|
||||
if (\LIBXML_VERSION < 20900) {
|
||||
// Reset the entity loader
|
||||
libxml_disable_entity_loader($this->xmlLoaderValue);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove the XML Doctype
|
||||
* It may be caught later on output but that seems to be buggy, so we need to make sure it's gone
|
||||
*/
|
||||
protected function removeDoctype()
|
||||
{
|
||||
foreach ($this->xmlDocument->childNodes as $child) {
|
||||
if ($child->nodeType === XML_DOCUMENT_TYPE_NODE) {
|
||||
$child->parentNode->removeChild($child);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Start the cleaning with tags, then we move onto attributes and hrefs later
|
||||
*
|
||||
* @param \DOMNodeList $elements
|
||||
* @param array $elementsToRemove
|
||||
*/
|
||||
protected function startClean(\DOMNodeList $elements, array $elementsToRemove)
|
||||
{
|
||||
// loop through all elements
|
||||
// we do this backwards so we don't skip anything if we delete a node
|
||||
// see comments at: http://php.net/manual/en/class.domnamednodemap.php
|
||||
for ($i = $elements->length - 1; $i >= 0; $i--) {
|
||||
/** @var \DOMElement $currentElement */
|
||||
$currentElement = $elements->item($i);
|
||||
|
||||
/**
|
||||
* If the element has exceeded the nesting limit, we should remove it.
|
||||
*
|
||||
* As it's only <use> elements that cause us issues with nesting DOS attacks
|
||||
* we should check what the element is before removing it. For now we'll only
|
||||
* remove <use> elements.
|
||||
*/
|
||||
if (in_array($currentElement, $elementsToRemove) && 'use' === $currentElement->nodeName) {
|
||||
$currentElement->parentNode->removeChild($currentElement);
|
||||
$this->xmlIssues[] = array(
|
||||
'message' => 'Invalid \'' . $currentElement->tagName . '\'',
|
||||
'line' => $currentElement->getLineNo(),
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
// If the tag isn't in the whitelist, remove it and continue with next iteration
|
||||
if (!in_array(strtolower($currentElement->tagName), $this->allowedTags)) {
|
||||
$currentElement->parentNode->removeChild($currentElement);
|
||||
$this->xmlIssues[] = array(
|
||||
'message' => 'Suspicious tag \'' . $currentElement->tagName . '\'',
|
||||
'line' => $currentElement->getLineNo(),
|
||||
);
|
||||
continue;
|
||||
}
|
||||
|
||||
$this->cleanHrefs($currentElement);
|
||||
|
||||
$this->cleanXlinkHrefs($currentElement);
|
||||
|
||||
$this->cleanAttributesOnWhitelist($currentElement);
|
||||
|
||||
if (strtolower($currentElement->tagName) === 'use') {
|
||||
if ($this->isUseTagDirty($currentElement)
|
||||
|| $this->isUseTagExceedingThreshold($currentElement)
|
||||
) {
|
||||
$currentElement->parentNode->removeChild($currentElement);
|
||||
$this->xmlIssues[] = array(
|
||||
'message' => 'Suspicious \'' . $currentElement->tagName . '\'',
|
||||
'line' => $currentElement->getLineNo(),
|
||||
);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Only allow attributes that are on the whitelist
|
||||
*
|
||||
* @param \DOMElement $element
|
||||
*/
|
||||
protected function cleanAttributesOnWhitelist(\DOMElement $element)
|
||||
{
|
||||
for ($x = $element->attributes->length - 1; $x >= 0; $x--) {
|
||||
// get attribute name
|
||||
$attrName = $element->attributes->item($x)->name;
|
||||
|
||||
// Remove attribute if not in whitelist
|
||||
if (!in_array(strtolower($attrName), $this->allowedAttrs) && !$this->isAriaAttribute(strtolower($attrName)) && !$this->isDataAttribute(strtolower($attrName))) {
|
||||
|
||||
$element->removeAttribute($attrName);
|
||||
$this->xmlIssues[] = array(
|
||||
'message' => 'Suspicious attribute \'' . $attrName . '\'',
|
||||
'line' => $element->getLineNo(),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is used for when a namespace isn't imported properly.
|
||||
* Such as xlink:href when the xlink namespace isn't imported.
|
||||
* We have to do this as the link is still ran in this case.
|
||||
*/
|
||||
if (false !== strpos($attrName, 'href')) {
|
||||
$href = $element->getAttribute($attrName);
|
||||
if (false === $this->isHrefSafeValue($href)) {
|
||||
$element->removeAttribute($attrName);
|
||||
$this->xmlIssues[] = array(
|
||||
'message' => 'Suspicious attribute \'href\'',
|
||||
'line' => $element->getLineNo(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Do we want to strip remote references?
|
||||
if($this->removeRemoteReferences) {
|
||||
// Remove attribute if it has a remote reference
|
||||
if (isset($element->attributes->item($x)->value) && $this->hasRemoteReference($element->attributes->item($x)->value)) {
|
||||
$element->removeAttribute($attrName);
|
||||
$this->xmlIssues[] = array(
|
||||
'message' => 'Suspicious attribute \'' . $attrName . '\'',
|
||||
'line' => $element->getLineNo(),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean the xlink:hrefs of script and data embeds
|
||||
*
|
||||
* @param \DOMElement $element
|
||||
*/
|
||||
protected function cleanXlinkHrefs(\DOMElement $element)
|
||||
{
|
||||
$xlinks = $element->getAttributeNS('http://www.w3.org/1999/xlink', 'href');
|
||||
if (false === $this->isHrefSafeValue($xlinks)) {
|
||||
$element->removeAttributeNS( 'http://www.w3.org/1999/xlink', 'href' );
|
||||
$this->xmlIssues[] = array(
|
||||
'message' => 'Suspicious attribute \'href\'',
|
||||
'line' => $element->getLineNo(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clean the hrefs of script and data embeds
|
||||
*
|
||||
* @param \DOMElement $element
|
||||
*/
|
||||
protected function cleanHrefs(\DOMElement $element)
|
||||
{
|
||||
$href = $element->getAttribute('href');
|
||||
if (false === $this->isHrefSafeValue($href)) {
|
||||
$element->removeAttribute('href');
|
||||
$this->xmlIssues[] = array(
|
||||
'message' => 'Suspicious attribute \'href\'',
|
||||
'line' => $element->getLineNo(),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Only allow whitelisted starts to be within the href.
|
||||
*
|
||||
* This will stop scripts etc from being passed through, with or without attempting to hide bypasses.
|
||||
* This stops the need for us to use a complicated script regex.
|
||||
*
|
||||
* @param $value
|
||||
* @return bool
|
||||
*/
|
||||
protected function isHrefSafeValue($value) {
|
||||
|
||||
// Allow empty values
|
||||
if (empty($value)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Allow fragment identifiers.
|
||||
if ('#' === substr($value, 0, 1)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Allow relative URIs.
|
||||
if ('/' === substr($value, 0, 1)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Allow HTTPS domains.
|
||||
if ('https://' === substr($value, 0, 8)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Allow HTTP domains.
|
||||
if ('http://' === substr($value, 0, 7)) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Allow known data URIs.
|
||||
if (in_array(substr($value, 0, 14), array(
|
||||
'data:image/png', // PNG
|
||||
'data:image/gif', // GIF
|
||||
'data:image/jpg', // JPG
|
||||
'data:image/jpe', // JPEG
|
||||
'data:image/pjp', // PJPEG
|
||||
))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Allow known short data URIs.
|
||||
if (in_array(substr($value, 0, 12), array(
|
||||
'data:img/png', // PNG
|
||||
'data:img/gif', // GIF
|
||||
'data:img/jpg', // JPG
|
||||
'data:img/jpe', // JPEG
|
||||
'data:img/pjp', // PJPEG
|
||||
))) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes non-printable ASCII characters from string & trims it
|
||||
*
|
||||
* @param string $value
|
||||
* @return bool
|
||||
*/
|
||||
protected function removeNonPrintableCharacters($value)
|
||||
{
|
||||
return trim(preg_replace('/[^ -~]/xu','',$value));
|
||||
}
|
||||
|
||||
/**
|
||||
* Does this attribute value have a remote reference?
|
||||
*
|
||||
* @param $value
|
||||
* @return bool
|
||||
*/
|
||||
protected function hasRemoteReference($value)
|
||||
{
|
||||
$value = $this->removeNonPrintableCharacters($value);
|
||||
|
||||
$wrapped_in_url = preg_match('~^url\(\s*[\'"]\s*(.*)\s*[\'"]\s*\)$~xi', $value, $match);
|
||||
if (!$wrapped_in_url){
|
||||
return false;
|
||||
}
|
||||
|
||||
$value = trim($match[1], '\'"');
|
||||
|
||||
return preg_match('~^((https?|ftp|file):)?//~xi', $value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Should we minify the output?
|
||||
*
|
||||
* @param bool $shouldMinify
|
||||
*/
|
||||
public function minify($shouldMinify = false)
|
||||
{
|
||||
$this->minifyXML = (bool) $shouldMinify;
|
||||
}
|
||||
|
||||
/**
|
||||
* Should we remove the XML tag in the header?
|
||||
*
|
||||
* @param bool $removeXMLTag
|
||||
*/
|
||||
public function removeXMLTag($removeXMLTag = false)
|
||||
{
|
||||
$this->removeXMLTag = (bool) $removeXMLTag;
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether `<use ... xlink:href="#identifier">` elements shall be
|
||||
* removed in case expansion would exceed this threshold.
|
||||
*
|
||||
* @param int $useThreshold
|
||||
*/
|
||||
public function useThreshold($useThreshold = 1000)
|
||||
{
|
||||
$this->useThreshold = (int)$useThreshold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if an attribute is an aria attribute or not
|
||||
*
|
||||
* @param $attributeName
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isAriaAttribute($attributeName)
|
||||
{
|
||||
return strpos($attributeName, 'aria-') === 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if an attribute is an data attribute or not
|
||||
*
|
||||
* @param $attributeName
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
protected function isDataAttribute($attributeName)
|
||||
{
|
||||
return strpos($attributeName, 'data-') === 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure our use tag is only referencing internal resources
|
||||
*
|
||||
* @param \DOMElement $element
|
||||
* @return bool
|
||||
*/
|
||||
protected function isUseTagDirty(\DOMElement $element)
|
||||
{
|
||||
$href = Helper::getElementHref($element);
|
||||
return $href && strpos($href, '#') !== 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines whether `<use ... xlink:href="#identifier">` is expanded
|
||||
* recursively in order to create DoS scenarios. The amount of a actually
|
||||
* used element needs to be below `$this->useThreshold`.
|
||||
*
|
||||
* @param \DOMElement $element
|
||||
* @return bool
|
||||
*/
|
||||
protected function isUseTagExceedingThreshold(\DOMElement $element)
|
||||
{
|
||||
if ($this->useThreshold <= 0) {
|
||||
return false;
|
||||
}
|
||||
$useId = Helper::extractIdReferenceFromHref(
|
||||
Helper::getElementHref($element)
|
||||
);
|
||||
if ($useId === null) {
|
||||
return false;
|
||||
}
|
||||
foreach ($this->elementReferenceResolver->findByElementId($useId) as $subject) {
|
||||
if ($subject->countUse() >= $this->useThreshold) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the nesting limit for <use> tags.
|
||||
*
|
||||
* @param $limit
|
||||
*/
|
||||
public function setUseNestingLimit($limit)
|
||||
{
|
||||
$this->useNestingLimit = (int) $limit;
|
||||
}
|
||||
}
|
357
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/data/AllowedAttributes.php
vendored
Normal file
@ -0,0 +1,357 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace enshrined\svgSanitize\data;
|
||||
|
||||
|
||||
/**
|
||||
* Class AllowedAttributes
|
||||
*
|
||||
* @package enshrined\svgSanitize\data
|
||||
*/
|
||||
class AllowedAttributes implements AttributeInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* Returns an array of attributes
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getAttributes()
|
||||
{
|
||||
return array(
|
||||
// HTML
|
||||
'about',
|
||||
'accept',
|
||||
'action',
|
||||
'align',
|
||||
'alt',
|
||||
'autocomplete',
|
||||
'background',
|
||||
'bgcolor',
|
||||
'border',
|
||||
'cellpadding',
|
||||
'cellspacing',
|
||||
'checked',
|
||||
'cite',
|
||||
'class',
|
||||
'clear',
|
||||
'color',
|
||||
'cols',
|
||||
'colspan',
|
||||
'coords',
|
||||
'crossorigin',
|
||||
'datetime',
|
||||
'default',
|
||||
'dir',
|
||||
'disabled',
|
||||
'download',
|
||||
'enctype',
|
||||
'encoding',
|
||||
'face',
|
||||
'for',
|
||||
'headers',
|
||||
'height',
|
||||
'hidden',
|
||||
'high',
|
||||
'href',
|
||||
'hreflang',
|
||||
'id',
|
||||
'integrity',
|
||||
'ismap',
|
||||
'label',
|
||||
'lang',
|
||||
'list',
|
||||
'loop',
|
||||
'low',
|
||||
'max',
|
||||
'maxlength',
|
||||
'media',
|
||||
'method',
|
||||
'min',
|
||||
'multiple',
|
||||
'name',
|
||||
'noshade',
|
||||
'novalidate',
|
||||
'nowrap',
|
||||
'open',
|
||||
'optimum',
|
||||
'pattern',
|
||||
'placeholder',
|
||||
'poster',
|
||||
'preload',
|
||||
'pubdate',
|
||||
'radiogroup',
|
||||
'readonly',
|
||||
'rel',
|
||||
'required',
|
||||
'rev',
|
||||
'reversed',
|
||||
'role',
|
||||
'rows',
|
||||
'rowspan',
|
||||
'spellcheck',
|
||||
'scope',
|
||||
'selected',
|
||||
'shape',
|
||||
'size',
|
||||
'sizes',
|
||||
'span',
|
||||
'srclang',
|
||||
'start',
|
||||
'src',
|
||||
'srcset',
|
||||
'step',
|
||||
'style',
|
||||
'summary',
|
||||
'tabindex',
|
||||
'title',
|
||||
'type',
|
||||
'usemap',
|
||||
'valign',
|
||||
'value',
|
||||
'version',
|
||||
'width',
|
||||
'xmlns',
|
||||
|
||||
// SVG
|
||||
'accent-height',
|
||||
'accumulate',
|
||||
'additivive',
|
||||
'alignment-baseline',
|
||||
'ascent',
|
||||
'attributename',
|
||||
'attributetype',
|
||||
'azimuth',
|
||||
'basefrequency',
|
||||
'baseline-shift',
|
||||
'begin',
|
||||
'bias',
|
||||
'by',
|
||||
'class',
|
||||
'clip',
|
||||
'clip-path',
|
||||
'clip-rule',
|
||||
'color',
|
||||
'color-interpolation',
|
||||
'color-interpolation-filters',
|
||||
'color-profile',
|
||||
'color-rendering',
|
||||
'cx',
|
||||
'cy',
|
||||
'd',
|
||||
'dx',
|
||||
'dy',
|
||||
'diffuseconstant',
|
||||
'direction',
|
||||
'display',
|
||||
'divisor',
|
||||
'dur',
|
||||
'edgemode',
|
||||
'elevation',
|
||||
'end',
|
||||
'fill',
|
||||
'fill-opacity',
|
||||
'fill-rule',
|
||||
'filter',
|
||||
'flood-color',
|
||||
'flood-opacity',
|
||||
'font-family',
|
||||
'font-size',
|
||||
'font-size-adjust',
|
||||
'font-stretch',
|
||||
'font-style',
|
||||
'font-variant',
|
||||
'font-weight',
|
||||
'fx',
|
||||
'fy',
|
||||
'g1',
|
||||
'g2',
|
||||
'glyph-name',
|
||||
'glyphref',
|
||||
'gradientunits',
|
||||
'gradienttransform',
|
||||
'height',
|
||||
'href',
|
||||
'id',
|
||||
'image-rendering',
|
||||
'in',
|
||||
'in2',
|
||||
'k',
|
||||
'k1',
|
||||
'k2',
|
||||
'k3',
|
||||
'k4',
|
||||
'kerning',
|
||||
'keypoints',
|
||||
'keysplines',
|
||||
'keytimes',
|
||||
'lang',
|
||||
'lengthadjust',
|
||||
'letter-spacing',
|
||||
'kernelmatrix',
|
||||
'kernelunitlength',
|
||||
'lighting-color',
|
||||
'local',
|
||||
'marker-end',
|
||||
'marker-mid',
|
||||
'marker-start',
|
||||
'markerheight',
|
||||
'markerunits',
|
||||
'markerwidth',
|
||||
'maskcontentunits',
|
||||
'maskunits',
|
||||
'max',
|
||||
'mask',
|
||||
'media',
|
||||
'method',
|
||||
'mode',
|
||||
'min',
|
||||
'name',
|
||||
'numoctaves',
|
||||
'offset',
|
||||
'operator',
|
||||
'opacity',
|
||||
'order',
|
||||
'orient',
|
||||
'orientation',
|
||||
'origin',
|
||||
'overflow',
|
||||
'paint-order',
|
||||
'path',
|
||||
'pathlength',
|
||||
'patterncontentunits',
|
||||
'patterntransform',
|
||||
'patternunits',
|
||||
'points',
|
||||
'preservealpha',
|
||||
'preserveaspectratio',
|
||||
'r',
|
||||
'rx',
|
||||
'ry',
|
||||
'radius',
|
||||
'refx',
|
||||
'refy',
|
||||
'repeatcount',
|
||||
'repeatdur',
|
||||
'restart',
|
||||
'result',
|
||||
'rotate',
|
||||
'scale',
|
||||
'seed',
|
||||
'shape-rendering',
|
||||
'specularconstant',
|
||||
'specularexponent',
|
||||
'spreadmethod',
|
||||
'stddeviation',
|
||||
'stitchtiles',
|
||||
'stop-color',
|
||||
'stop-opacity',
|
||||
'stroke-dasharray',
|
||||
'stroke-dashoffset',
|
||||
'stroke-linecap',
|
||||
'stroke-linejoin',
|
||||
'stroke-miterlimit',
|
||||
'stroke-opacity',
|
||||
'stroke',
|
||||
'stroke-width',
|
||||
'style',
|
||||
'surfacescale',
|
||||
'tabindex',
|
||||
'targetx',
|
||||
'targety',
|
||||
'transform',
|
||||
'text-anchor',
|
||||
'text-decoration',
|
||||
'text-rendering',
|
||||
'textlength',
|
||||
'type',
|
||||
'u1',
|
||||
'u2',
|
||||
'unicode',
|
||||
'values',
|
||||
'viewbox',
|
||||
'visibility',
|
||||
'vert-adv-y',
|
||||
'vert-origin-x',
|
||||
'vert-origin-y',
|
||||
'width',
|
||||
'word-spacing',
|
||||
'wrap',
|
||||
'writing-mode',
|
||||
'xchannelselector',
|
||||
'ychannelselector',
|
||||
'x',
|
||||
'x1',
|
||||
'x2',
|
||||
'xmlns',
|
||||
'y',
|
||||
'y1',
|
||||
'y2',
|
||||
'z',
|
||||
'zoomandpan',
|
||||
|
||||
// MathML
|
||||
'accent',
|
||||
'accentunder',
|
||||
'align',
|
||||
'bevelled',
|
||||
'close',
|
||||
'columnsalign',
|
||||
'columnlines',
|
||||
'columnspan',
|
||||
'denomalign',
|
||||
'depth',
|
||||
'dir',
|
||||
'display',
|
||||
'displaystyle',
|
||||
'fence',
|
||||
'frame',
|
||||
'height',
|
||||
'href',
|
||||
'id',
|
||||
'largeop',
|
||||
'length',
|
||||
'linethickness',
|
||||
'lspace',
|
||||
'lquote',
|
||||
'mathbackground',
|
||||
'mathcolor',
|
||||
'mathsize',
|
||||
'mathvariant',
|
||||
'maxsize',
|
||||
'minsize',
|
||||
'movablelimits',
|
||||
'notation',
|
||||
'numalign',
|
||||
'open',
|
||||
'rowalign',
|
||||
'rowlines',
|
||||
'rowspacing',
|
||||
'rowspan',
|
||||
'rspace',
|
||||
'rquote',
|
||||
'scriptlevel',
|
||||
'scriptminsize',
|
||||
'scriptsizemultiplier',
|
||||
'selection',
|
||||
'separator',
|
||||
'separators',
|
||||
'slope',
|
||||
'stretchy',
|
||||
'subscriptshift',
|
||||
'supscriptshift',
|
||||
'symmetric',
|
||||
'voffset',
|
||||
'width',
|
||||
'xmlns',
|
||||
|
||||
// XML
|
||||
'xlink:href',
|
||||
'xml:id',
|
||||
'xlink:title',
|
||||
'xml:space',
|
||||
'xmlns:xlink',
|
||||
);
|
||||
}
|
||||
}
|
245
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/data/AllowedTags.php
vendored
Normal file
@ -0,0 +1,245 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace enshrined\svgSanitize\data;
|
||||
|
||||
|
||||
/**
|
||||
* Class AllowedTags
|
||||
*
|
||||
* @package enshrined\svgSanitize\data
|
||||
*/
|
||||
class AllowedTags implements TagInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* Returns an array of tags
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getTags()
|
||||
{
|
||||
return array (
|
||||
// HTML
|
||||
'a',
|
||||
'abbr',
|
||||
'acronym',
|
||||
'address',
|
||||
'area',
|
||||
'article',
|
||||
'aside',
|
||||
'audio',
|
||||
'b',
|
||||
'bdi',
|
||||
'bdo',
|
||||
'big',
|
||||
'blink',
|
||||
'blockquote',
|
||||
'body',
|
||||
'br',
|
||||
'button',
|
||||
'canvas',
|
||||
'caption',
|
||||
'center',
|
||||
'cite',
|
||||
'code',
|
||||
'col',
|
||||
'colgroup',
|
||||
'content',
|
||||
'data',
|
||||
'datalist',
|
||||
'dd',
|
||||
'decorator',
|
||||
'del',
|
||||
'details',
|
||||
'dfn',
|
||||
'dir',
|
||||
'div',
|
||||
'dl',
|
||||
'dt',
|
||||
'element',
|
||||
'em',
|
||||
'fieldset',
|
||||
'figcaption',
|
||||
'figure',
|
||||
'font',
|
||||
'footer',
|
||||
'form',
|
||||
'h1',
|
||||
'h2',
|
||||
'h3',
|
||||
'h4',
|
||||
'h5',
|
||||
'h6',
|
||||
'head',
|
||||
'header',
|
||||
'hgroup',
|
||||
'hr',
|
||||
'html',
|
||||
'i',
|
||||
'image',
|
||||
'img',
|
||||
'input',
|
||||
'ins',
|
||||
'kbd',
|
||||
'label',
|
||||
'legend',
|
||||
'li',
|
||||
'main',
|
||||
'map',
|
||||
'mark',
|
||||
'marquee',
|
||||
'menu',
|
||||
'menuitem',
|
||||
'meter',
|
||||
'nav',
|
||||
'nobr',
|
||||
'ol',
|
||||
'optgroup',
|
||||
'option',
|
||||
'output',
|
||||
'p',
|
||||
'pre',
|
||||
'progress',
|
||||
'q',
|
||||
'rp',
|
||||
'rt',
|
||||
'ruby',
|
||||
's',
|
||||
'samp',
|
||||
'section',
|
||||
'select',
|
||||
'shadow',
|
||||
'small',
|
||||
'source',
|
||||
'spacer',
|
||||
'span',
|
||||
'strike',
|
||||
'strong',
|
||||
'style',
|
||||
'sub',
|
||||
'summary',
|
||||
'sup',
|
||||
'table',
|
||||
'tbody',
|
||||
'td',
|
||||
'template',
|
||||
'textarea',
|
||||
'tfoot',
|
||||
'th',
|
||||
'thead',
|
||||
'time',
|
||||
'tr',
|
||||
'track',
|
||||
'tt',
|
||||
'u',
|
||||
'ul',
|
||||
'var',
|
||||
'video',
|
||||
'wbr',
|
||||
|
||||
// SVG
|
||||
'svg',
|
||||
'altglyph',
|
||||
'altglyphdef',
|
||||
'altglyphitem',
|
||||
'animatecolor',
|
||||
'animatemotion',
|
||||
'animatetransform',
|
||||
'circle',
|
||||
'clippath',
|
||||
'defs',
|
||||
'desc',
|
||||
'ellipse',
|
||||
'filter',
|
||||
'font',
|
||||
'g',
|
||||
'glyph',
|
||||
'glyphref',
|
||||
'hkern',
|
||||
'image',
|
||||
'line',
|
||||
'lineargradient',
|
||||
'marker',
|
||||
'mask',
|
||||
'metadata',
|
||||
'mpath',
|
||||
'path',
|
||||
'pattern',
|
||||
'polygon',
|
||||
'polyline',
|
||||
'radialgradient',
|
||||
'rect',
|
||||
'stop',
|
||||
'switch',
|
||||
'symbol',
|
||||
'text',
|
||||
'textpath',
|
||||
'title',
|
||||
'tref',
|
||||
'tspan',
|
||||
'use',
|
||||
'view',
|
||||
'vkern',
|
||||
|
||||
// SVG Filters
|
||||
'feBlend',
|
||||
'feColorMatrix',
|
||||
'feComponentTransfer',
|
||||
'feComposite',
|
||||
'feConvolveMatrix',
|
||||
'feDiffuseLighting',
|
||||
'feDisplacementMap',
|
||||
'feDistantLight',
|
||||
'feFlood',
|
||||
'feFuncA',
|
||||
'feFuncB',
|
||||
'feFuncG',
|
||||
'feFuncR',
|
||||
'feGaussianBlur',
|
||||
'feMerge',
|
||||
'feMergeNode',
|
||||
'feMorphology',
|
||||
'feOffset',
|
||||
'fePointLight',
|
||||
'feSpecularLighting',
|
||||
'feSpotLight',
|
||||
'feTile',
|
||||
'feTurbulence',
|
||||
|
||||
//MathML
|
||||
'math',
|
||||
'menclose',
|
||||
'merror',
|
||||
'mfenced',
|
||||
'mfrac',
|
||||
'mglyph',
|
||||
'mi',
|
||||
'mlabeledtr',
|
||||
'mmuliscripts',
|
||||
'mn',
|
||||
'mo',
|
||||
'mover',
|
||||
'mpadded',
|
||||
'mphantom',
|
||||
'mroot',
|
||||
'mrow',
|
||||
'ms',
|
||||
'mpspace',
|
||||
'msqrt',
|
||||
'mystyle',
|
||||
'msub',
|
||||
'msup',
|
||||
'msubsup',
|
||||
'mtable',
|
||||
'mtd',
|
||||
'mtext',
|
||||
'mtr',
|
||||
'munder',
|
||||
'munderover',
|
||||
|
||||
//text
|
||||
'#text'
|
||||
);
|
||||
}
|
||||
}
|
19
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/data/AttributeInterface.php
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\data;
|
||||
|
||||
|
||||
/**
|
||||
* Class AttributeInterface
|
||||
*
|
||||
* @package enshrined\svgSanitize\data
|
||||
*/
|
||||
interface AttributeInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* Returns an array of attributes
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getAttributes();
|
||||
}
|
19
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/data/TagInterface.php
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\data;
|
||||
|
||||
/**
|
||||
* Interface TagInterface
|
||||
*
|
||||
* @package enshrined\svgSanitize\tags
|
||||
*/
|
||||
interface TagInterface
|
||||
{
|
||||
|
||||
/**
|
||||
* Returns an array of tags
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getTags();
|
||||
|
||||
}
|
64
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/data/XPath.php
vendored
Normal file
@ -0,0 +1,64 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\data;
|
||||
|
||||
class XPath extends \DOMXPath
|
||||
{
|
||||
const DEFAULT_NAMESPACE_PREFIX = 'svg';
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
protected $defaultNamespaceURI;
|
||||
|
||||
public function __construct(\DOMDocument $doc)
|
||||
{
|
||||
parent::__construct($doc);
|
||||
$this->handleDefaultNamespace();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $nodeName
|
||||
* @return string
|
||||
*/
|
||||
public function createNodeName($nodeName)
|
||||
{
|
||||
if (empty($this->defaultNamespaceURI)) {
|
||||
return $nodeName;
|
||||
}
|
||||
return self::DEFAULT_NAMESPACE_PREFIX . ':' . $nodeName;
|
||||
}
|
||||
|
||||
protected function handleDefaultNamespace()
|
||||
{
|
||||
$rootElements = $this->getRootElements();
|
||||
|
||||
if (count($rootElements) !== 1) {
|
||||
throw new \LogicException(
|
||||
sprintf('Got %d svg elements, expected exactly one', count($rootElements)),
|
||||
1570870568
|
||||
);
|
||||
}
|
||||
$this->defaultNamespaceURI = (string)$rootElements[0]->namespaceURI;
|
||||
|
||||
if ($this->defaultNamespaceURI !== '') {
|
||||
$this->registerNamespace(self::DEFAULT_NAMESPACE_PREFIX, $this->defaultNamespaceURI);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return \DOMElement[]
|
||||
*/
|
||||
protected function getRootElements()
|
||||
{
|
||||
$rootElements = [];
|
||||
$elements = $this->document->getElementsByTagName('svg');
|
||||
/** @var \DOMElement $element */
|
||||
foreach ($elements as $element) {
|
||||
if ($element->parentNode !== $this->document) {
|
||||
continue;
|
||||
}
|
||||
$rootElements[] = $element;
|
||||
}
|
||||
return $rootElements;
|
||||
}
|
||||
}
|
192
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/src/svg-scanner.php
vendored
Normal file
@ -0,0 +1,192 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/*
|
||||
* Simple program that uses svg-sanitizer
|
||||
* to find issues in files specified on the
|
||||
* command line, and prints a JSON output with
|
||||
* the issues found on exit.
|
||||
*/
|
||||
|
||||
require_once( __DIR__ . '/data/AttributeInterface.php' );
|
||||
require_once( __DIR__ . '/data/TagInterface.php' );
|
||||
require_once( __DIR__ . '/data/AllowedAttributes.php' );
|
||||
require_once( __DIR__ . '/data/AllowedTags.php' );
|
||||
require_once( __DIR__ . '/data/XPath.php' );
|
||||
require_once( __DIR__ . '/ElementReference/Resolver.php' );
|
||||
require_once( __DIR__ . '/ElementReference/Subject.php' );
|
||||
require_once( __DIR__ . '/ElementReference/Usage.php' );
|
||||
require_once( __DIR__ . '/Exceptions/NestingException.php' );
|
||||
require_once( __DIR__ . '/Helper.php' );
|
||||
require_once( __DIR__ . '/Sanitizer.php' );
|
||||
|
||||
/*
|
||||
* Print array as JSON and then
|
||||
* exit program with a particular
|
||||
* exit-code.
|
||||
*/
|
||||
|
||||
function sysexit(
|
||||
$results,
|
||||
$status
|
||||
) {
|
||||
echo json_encode(
|
||||
$results,
|
||||
JSON_PRETTY_PRINT
|
||||
);
|
||||
|
||||
exit( $status );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Main part begins
|
||||
*/
|
||||
|
||||
global $argv;
|
||||
|
||||
/*
|
||||
* Set up results array, to
|
||||
* be printed on exit.
|
||||
*/
|
||||
$results = array(
|
||||
'totals' => array(
|
||||
'errors' => 0,
|
||||
),
|
||||
|
||||
'files' => array(
|
||||
),
|
||||
);
|
||||
|
||||
|
||||
/*
|
||||
* Catch files to scan from $argv.
|
||||
*/
|
||||
|
||||
$files_to_scan = $argv;
|
||||
unset( $files_to_scan[0] );
|
||||
|
||||
$files_to_scan = array_values(
|
||||
$files_to_scan
|
||||
);
|
||||
|
||||
/*
|
||||
* Catch no file specified.
|
||||
*/
|
||||
|
||||
if ( empty( $files_to_scan ) ) {
|
||||
$results['totals']['errors']++;
|
||||
$results['messages'] = array(
|
||||
array( 'No files to scan specified' ),
|
||||
);
|
||||
|
||||
sysexit(
|
||||
$results,
|
||||
1
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the SVG scanner.
|
||||
*
|
||||
* Make sure to allow custom attributes,
|
||||
* and to remove remote references.
|
||||
*/
|
||||
$sanitizer = new enshrined\svgSanitize\Sanitizer();
|
||||
|
||||
$sanitizer->removeRemoteReferences( true );
|
||||
|
||||
/*
|
||||
* Scan each file specified to be scanned.
|
||||
*/
|
||||
|
||||
foreach( $files_to_scan as $file_name ) {
|
||||
/*
|
||||
* Read SVG file.
|
||||
*/
|
||||
$svg_file = @file_get_contents( $file_name );
|
||||
|
||||
/*
|
||||
* If not found, report that and continue.
|
||||
*/
|
||||
if ( false === $svg_file ) {
|
||||
$results['totals']['errors']++;
|
||||
|
||||
$results['files'][ $file_name ][] = array(
|
||||
'errors' => 1,
|
||||
'messages' => array(
|
||||
array(
|
||||
'message' => 'File specified could not be read (' . $file_name . ')',
|
||||
'line' => null,
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Sanitize file and get issues found.
|
||||
*/
|
||||
$sanitize_status = $sanitizer->sanitize( $svg_file );
|
||||
|
||||
$xml_issues = $sanitizer->getXmlIssues();
|
||||
|
||||
/*
|
||||
* If we find no issues, simply note that.
|
||||
*/
|
||||
if ( empty( $xml_issues ) && ( false !== $sanitize_status ) ) {
|
||||
$results['files'][ $file_name ] = array(
|
||||
'errors' => 0,
|
||||
'messages' => array()
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* Could not sanitize the file.
|
||||
*/
|
||||
else if (
|
||||
( '' === $sanitize_status ) ||
|
||||
( false === $sanitize_status )
|
||||
) {
|
||||
$results['totals']['errors']++;
|
||||
|
||||
$results['files'][ $file_name ] = array(
|
||||
'errors' => 1,
|
||||
'messages' => array(
|
||||
array(
|
||||
'message' => 'Unable to sanitize file \'' . $file_name . '\'' ,
|
||||
'line' => null,
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/*
|
||||
* If we find issues, note it and update statistics.
|
||||
*/
|
||||
|
||||
else {
|
||||
$results['totals']['errors'] += count( $xml_issues );
|
||||
|
||||
$results['files'][ $file_name ] = array(
|
||||
'errors' => count( $xml_issues ),
|
||||
'messages' => $xml_issues,
|
||||
);
|
||||
}
|
||||
|
||||
unset( $svg_file );
|
||||
unset( $xml_issues );
|
||||
unset( $sanitize_status );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Exit with a status
|
||||
* that reflects what issues
|
||||
* we found.
|
||||
*/
|
||||
sysexit(
|
||||
$results,
|
||||
( $results['totals']['errors'] === 0 ? 0 : 1 )
|
||||
);
|
29
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/AllowedAttributesTest.php
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\Tests;
|
||||
|
||||
use enshrined\svgSanitize\data\AllowedAttributes;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Class AllowedAttributesTest
|
||||
*/
|
||||
class AllowedAttributesTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Test that the class implements the interface
|
||||
*/
|
||||
public function testItImplementsTheInterface()
|
||||
{
|
||||
$class = new AllowedAttributes();
|
||||
self::assertInstanceOf('enshrined\svgSanitize\data\AttributeInterface', $class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that an array is returned
|
||||
*/
|
||||
public function testThatItReturnsAnArray()
|
||||
{
|
||||
$result = AllowedAttributes::getAttributes();
|
||||
self::assertSame('array', gettype($result));
|
||||
}
|
||||
}
|
29
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/AllowedTagsTest.php
vendored
Normal file
@ -0,0 +1,29 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\Tests;
|
||||
|
||||
use enshrined\svgSanitize\data\AllowedTags;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Class AllowedTagsTest
|
||||
*/
|
||||
class AllowedTagsTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Test that the class implements the interface
|
||||
*/
|
||||
public function testItImplementsTheInterface()
|
||||
{
|
||||
$class = new AllowedTags();
|
||||
self::assertInstanceOf('enshrined\svgSanitize\data\TagInterface', $class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that an array is returned
|
||||
*/
|
||||
public function testThatItReturnsAnArray()
|
||||
{
|
||||
$result = AllowedTags::getTags();
|
||||
self::assertSame('array', gettype($result));
|
||||
}
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\Tests\Fixtures;
|
||||
|
||||
use enshrined\svgSanitize\data\AttributeInterface;
|
||||
|
||||
class TestAllowedAttributes implements AttributeInterface
|
||||
{
|
||||
/**
|
||||
* Returns an array of attributes
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getAttributes()
|
||||
{
|
||||
return array(
|
||||
'testAttribute',
|
||||
);
|
||||
}
|
||||
}
|
19
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/Fixtures/TestAllowedTags.php
vendored
Normal file
@ -0,0 +1,19 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\Tests\Fixtures;
|
||||
|
||||
use enshrined\svgSanitize\data\TagInterface;
|
||||
|
||||
class TestAllowedTags implements TagInterface
|
||||
{
|
||||
/**
|
||||
* Returns an array of tags
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public static function getTags()
|
||||
{
|
||||
return array(
|
||||
'testTag',
|
||||
);
|
||||
}
|
||||
}
|
297
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/SanitizerTest.php
vendored
Normal file
@ -0,0 +1,297 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\Tests;
|
||||
|
||||
use enshrined\svgSanitize\Sanitizer;
|
||||
use enshrined\svgSanitize\Tests\Fixtures\TestAllowedAttributes;
|
||||
use enshrined\svgSanitize\Tests\Fixtures\TestAllowedTags;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Class SanitizerTest
|
||||
*/
|
||||
class SanitizerTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* Make sure the initial tags are loaded
|
||||
*/
|
||||
public function testLoadDefaultTags()
|
||||
{
|
||||
$sanitizer = new Sanitizer();
|
||||
$tags = $sanitizer->getAllowedTags();
|
||||
|
||||
self::assertSame('array', gettype($tags));
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure the initial attributes are loaded
|
||||
*/
|
||||
public function testLoadDefaultAttributes()
|
||||
{
|
||||
$sanitizer = new Sanitizer();
|
||||
$attributes = $sanitizer->getAllowedAttrs();
|
||||
|
||||
self::assertSame('array', gettype($attributes));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the custom tag setters and getters
|
||||
*/
|
||||
public function testSetCustomTags()
|
||||
{
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->setAllowedTags(new TestAllowedTags());
|
||||
$tags = $sanitizer->getAllowedTags();
|
||||
|
||||
self::assertSame('array', gettype($tags));
|
||||
self::assertSame(array_map('strtolower', TestAllowedTags::getTags()), $tags);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test the custom attribute setters and getters
|
||||
*/
|
||||
public function testSetCustomAttributes()
|
||||
{
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->setAllowedAttrs(new TestAllowedAttributes());
|
||||
$attributes = $sanitizer->getAllowedAttrs();
|
||||
|
||||
self::assertSame('array', gettype($attributes));
|
||||
self::assertSame( array_map('strtolower', TestAllowedAttributes::getAttributes()), $attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that malicious elements and attributes are removed from standard XML
|
||||
*/
|
||||
public function testSanitizeXMLDoc()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/xmlTestOne.xml');
|
||||
$expected = file_get_contents($dataDirectory . '/xmlCleanOne.xml');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that malicious elements and attributes are removed from an SVG
|
||||
*/
|
||||
public function testSanitizeSVGDoc()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/svgTestOne.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/svgCleanOne.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that a badly formatted XML document returns false
|
||||
*/
|
||||
public function testBadXMLReturnsFalse()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/badXmlTestOne.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertSame(false, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure that hrefs get sanitized correctly
|
||||
*/
|
||||
public function testSanitizeHrefs()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/hrefTestOne.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/hrefCleanOne.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure that hrefs get sanitized correctly when the xlink namespace is omitted.
|
||||
*/
|
||||
public function testSanitizeHrefsNoXlinkNamespace()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/hrefTestTwo.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/hrefCleanTwo.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure that external references get sanitized correctly
|
||||
*/
|
||||
public function testSanitizeExternal()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/externalTest.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/externalClean.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->removeRemoteReferences(true);
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that minification of an SVG works
|
||||
*/
|
||||
public function testSanitizeAndMinifiySVGDoc()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/svgTestOne.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/svgCleanOneMinified.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->minify(true);
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that ARIA and Data Attributes are allowed
|
||||
*/
|
||||
public function testThatAriaAndDataAttributesAreAllowed()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/ariaDataTest.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/ariaDataClean.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->minify(false);
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test that ARIA and Data Attributes are allowed
|
||||
*/
|
||||
public function testThatExternalUseElementsAreStripped()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/useTest.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/useClean.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->minify(false);
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test setXMLOptions and minifying works as expected
|
||||
*/
|
||||
public function testMinifiedOptions()
|
||||
{
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->minify(true);
|
||||
$sanitizer->removeXMLTag(true);
|
||||
$sanitizer->setXMLOptions(0);
|
||||
|
||||
$input = '<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><title>chevron-double-down</title><path d="M4 11.73l.68-.73L12 17.82 19.32 11l.68.73-7.66 7.13a.5.5 0 0 1-.68 0z"/><path d="M4 5.73L4.68 5 12 11.82 19.32 5l.68.73-7.66 7.13a.5.5 0 0 1-.68 0z"/></svg>';
|
||||
$output = $sanitizer->sanitize($input);
|
||||
|
||||
self::assertSame($input, $output);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function useRecursionsAreDetected()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/xlinkLaughsTest.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/xlinkLaughsClean.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->minify(false);
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function infiniteUseLoopsAreDetected()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/xlinkLoopTest.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/xlinkLoopClean.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->minify(false);
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* @test
|
||||
*/
|
||||
public function doctypeAndEntityAreRemoved()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/entityTest.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/entityClean.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->minify(false);
|
||||
$sanitizer->removeRemoteReferences(true);
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertSame($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure that DOS attacks using the <use> element are detected.
|
||||
*/
|
||||
public function testUseDOSattacksAreNullified()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/useDosTest.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/useDosClean.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->minify(false);
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
|
||||
/**
|
||||
* Make sure that DOS attacks using the <use> element are detected,
|
||||
* especially when the SVG is extremely large.
|
||||
*/
|
||||
public function testLargeUseDOSattacksAreNullified()
|
||||
{
|
||||
$dataDirectory = __DIR__ . '/data';
|
||||
$initialData = file_get_contents($dataDirectory . '/useDosTestTwo.svg');
|
||||
$expected = file_get_contents($dataDirectory . '/useDosCleanTwo.svg');
|
||||
|
||||
$sanitizer = new Sanitizer();
|
||||
$sanitizer->minify(false);
|
||||
$cleanData = $sanitizer->sanitize($initialData);
|
||||
|
||||
self::assertXmlStringEqualsXmlString($expected, $cleanData);
|
||||
}
|
||||
}
|
148
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/SubjectTest.php
vendored
Normal file
@ -0,0 +1,148 @@
|
||||
<?php
|
||||
namespace enshrined\svgSanitize\Tests;
|
||||
|
||||
use enshrined\svgSanitize\ElementReference\Subject;
|
||||
use PHPUnit\Framework\TestCase;
|
||||
|
||||
/**
|
||||
* Class SubjectTest
|
||||
*/
|
||||
class SubjectTest extends TestCase
|
||||
{
|
||||
/**
|
||||
* @var int
|
||||
*/
|
||||
protected $nestingLimit = 15;
|
||||
|
||||
/**
|
||||
* <first>
|
||||
* <!-- 0 -->
|
||||
* </first>
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function oneLevelCountsUseIsCorrect()
|
||||
{
|
||||
$first = new \DOMElement('first');
|
||||
$firstSubject = new Subject($first, $this->nestingLimit);
|
||||
self::assertSame(0, $firstSubject->countUse(false));
|
||||
self::assertSame(0, $firstSubject->countUse(true));
|
||||
}
|
||||
|
||||
/**
|
||||
* <first>
|
||||
* <second /> <!-- 1 -->
|
||||
* <second /> <!-- 2 -->
|
||||
* </first>
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function twoLevelsCountUseIsCorrect()
|
||||
{
|
||||
$first = new \DOMElement('first');
|
||||
$second = new \DOMElement('second');
|
||||
$firstSubject = new Subject($first, $this->nestingLimit);
|
||||
$secondSubject = new Subject($second, $this->nestingLimit);
|
||||
$firstSubject->addUse($secondSubject);
|
||||
$firstSubject->addUse($secondSubject);
|
||||
self::assertSame(2, $firstSubject->countUse(false));
|
||||
self::assertSame(2, $firstSubject->countUse(true));
|
||||
}
|
||||
|
||||
/**
|
||||
* <first>
|
||||
* <second> <!-- accumulated=false: 0; accumulated=true: 1 -->
|
||||
* <third /> <!-- accumulated=false: 1; accumulated=true: 2 -->
|
||||
* <third /> <!-- accumulated=false: 2; accumulated=true: 3 -->
|
||||
* <third /> <!-- accumulated=false: 3; accumulated=true: 4 -->
|
||||
* </second>
|
||||
* <second> <!-- accumulated=false: 3; accumulated=true: 5 -->
|
||||
* <third /> <!-- accumulated=false: 4; accumulated=true: 6 -->
|
||||
* <third /> <!-- accumulated=false: 5; accumulated=true: 7 -->
|
||||
* <third /> <!-- accumulated=false: 6; accumulated=true: 8 -->
|
||||
* </second>
|
||||
* </first>
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function threeLevelsCountUseIsCorrect()
|
||||
{
|
||||
$first = new \DOMElement('first');
|
||||
$second = new \DOMElement('second');
|
||||
$third = new \DOMElement('third');
|
||||
$firstSubject = new Subject($first, $this->nestingLimit);
|
||||
$secondSubject = new Subject($second, $this->nestingLimit);
|
||||
$thirdSubject = new Subject($third, $this->nestingLimit);
|
||||
$firstSubject->addUse($secondSubject);
|
||||
$firstSubject->addUse($secondSubject);
|
||||
$secondSubject->addUse($thirdSubject);
|
||||
$secondSubject->addUse($thirdSubject);
|
||||
$secondSubject->addUse($thirdSubject);
|
||||
self::assertSame(6, $firstSubject->countUse(false));
|
||||
self::assertSame(8, $firstSubject->countUse(true));
|
||||
}
|
||||
|
||||
/**
|
||||
* <first>
|
||||
* </first>
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function oneLevelCountsUsedInIsCorrect()
|
||||
{
|
||||
$first = new \DOMElement('first');
|
||||
$firstSubject = new Subject($first, $this->nestingLimit);
|
||||
self::assertSame(0, $firstSubject->countUsedIn());
|
||||
}
|
||||
|
||||
/**
|
||||
* <first>
|
||||
* <second /> <!-- 1 -->
|
||||
* <second /> <!-- 2 -->
|
||||
* </first>
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function twoLevelsCountUsedInIsCorrect()
|
||||
{
|
||||
$first = new \DOMElement('first');
|
||||
$second = new \DOMElement('second');
|
||||
$firstSubject = new Subject($first, $this->nestingLimit);
|
||||
$secondSubject = new Subject($second, $this->nestingLimit);
|
||||
$secondSubject->addUsedIn($firstSubject);
|
||||
$secondSubject->addUsedIn($firstSubject);
|
||||
self::assertSame(2, $secondSubject->countUsedIn());
|
||||
}
|
||||
|
||||
/**
|
||||
* <first>
|
||||
* <second>
|
||||
* <third /> <!-- 1 -->
|
||||
* <third /> <!-- 2 -->
|
||||
* <third /> <!-- 3 -->
|
||||
* </second>
|
||||
* <second>
|
||||
* <third /> <!-- 4 -->
|
||||
* <third /> <!-- 5 -->
|
||||
* <third /> <!-- 6 -->
|
||||
* </second>
|
||||
* </first>
|
||||
*
|
||||
* @test
|
||||
*/
|
||||
public function threeLevelsCountUsedInIsCorrect()
|
||||
{
|
||||
$first = new \DOMElement('first');
|
||||
$second = new \DOMElement('second');
|
||||
$third = new \DOMElement('third');
|
||||
$firstSubject = new Subject($first, $this->nestingLimit);
|
||||
$secondSubject = new Subject($second, $this->nestingLimit);
|
||||
$thirdSubject = new Subject($third, $this->nestingLimit);
|
||||
$thirdSubject->addUsedIn($secondSubject);
|
||||
$thirdSubject->addUsedIn($secondSubject);
|
||||
$thirdSubject->addUsedIn($secondSubject);
|
||||
$secondSubject->addUsedIn($firstSubject);
|
||||
$secondSubject->addUsedIn($firstSubject);
|
||||
self::assertSame(6, $thirdSubject->countUsedIn());
|
||||
}
|
||||
}
|
56
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/ariaDataClean.svg
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
<svg id="cat" viewBox="0 0 720 800" aria-labelledby="catTitle catDesc" role="img" version="1">
|
||||
<title id="catTitle">Pixels, My Super-friendly Cat</title>
|
||||
<desc id="catDesc">An illustrated gray cat with bright green blinking eyes.</desc>
|
||||
<path id="tail" data-name="tail" class="cls-1" d="M545.9,695.9c8,28.2,23.2,42.3,27.2,46.9,21.4,24.1,41.5,40.2,81.1,42.9s65.4-14.2,60.8-26.8-23.1-9.1-51.3-8.3c-35.2.9-66.6-31.3-74.8-63.9s-7.9-63.8-36.8-85.5c-44.1-33-135.6-7.1-159.8-3.4s-48.4,52.5-9.6,45.1,91.4-23.1,123.2-12.7C537.8,640.4,537.9,667.7,545.9,695.9Z" transform="translate(-9.7 -9.3)"/>
|
||||
<g id="body">
|
||||
<path id="bg" class="cls-2" d="M447.9,502.1c2.1,151.7-108.3,167-216.5,167S9.7,663.8,9.7,510.9,85,242.9,231.3,241,445.8,350.4,447.9,502.1h0Z" transform="translate(-9.7 -9.3)"/>
|
||||
<g id="leftleg">
|
||||
<path id="leg" class="cls-1" d="M195.6,671.5c-34.2-7.7-40.6-95.6-53.3-191-12-90-90.1-177.2-55.1-177.2s145.7,12,151.4,87.7S261.5,686.5,195.6,671.5Z" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="foot" class="cls-3" d="M172.2,688.1c31.6,2.1,56.6-8.7,59.8-32.4s-22.1-49.5-27.3-24.3c25-16.4-39.1-29.4-27.6-3.9,14-24.9-49.6-19.2-31.9-.1-6.5-27.2-35.6,8.2-30.1,29.3C121.5,681.8,140.5,686,172.2,688.1Z" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="rightleg">
|
||||
<path id="leg-2" data-name="leg" class="cls-1" d="M260.4,670.4c42.4-9.2,48.7-87.7,53.9-185.2,5.1-96,98.2-176.1,63.1-176.1s-164,15.7-164,111.8C213.4,420.9,199.1,683.7,260.4,670.4Z" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="foot-2" data-name="foot" class="cls-3" d="M279.4,689.8c-31.7,2-56.6-9-59.6-32.6s22.3-49.4,27.4-24.1c-24.9-16.5,39.2-29.2,27.6-3.8-13.9-25,49.7-18.9,31.9,0,6.6-27.1,35.6,8.4,30,29.4-6.7,25-25.7,29.1-57.3,31.1h0Z" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<path id="tuft" aria-haspopup="false" class="cls-3" d="M80,331.2c3.5,9.5,1.2,28.9,4.3,32.7s31.5-30,43-20.6c10.7,8.7,1.7,55.9,12.9,64.5,10.1,7.7,32.1-50.6,52.5-38.7,24.9,14.6,34.1,49.9,49,49.9,18.3,0,7.5-49.5,24.1-53.3s46.1,52.6,60.2,45.6c4.8-2.4,3-50.4,12-57.6,8.7-6.9,30.5,22.4,33.5,18.9,3.7-4.1.1-23.1,8.6-36.1,3.4-5.2,18.9-2.6,28.8-.4a3.46,3.46,0,0,0,3.7-5.2c-19.6-30.8-100-147.4-184.2-147.4-93.3,0-150.9,86.8-178.1,141.6a3.43,3.43,0,0,0,3.6,4.9C63,328.4,78.4,326.6,80,331.2Z" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="head">
|
||||
<path id="collar" class="cls-4" d="M367,231.1c5.7,36.1-4.7,71-97.8,85.6s-184-18.5-189.7-54.5,16.7-17.3,109.8-31.9,172-35.3,177.7.8" transform="translate(-9.7 -9.3)"/>
|
||||
<g id="bg-2" data-name="bg">
|
||||
<path class="cls-1" d="M362.5,229.5C339.7,279,273.1,299.4,225,300c-60.6.7-134.7-29.5-153.5-86.4C45.6,135.4,132.2,32.6,225,35.8c96.1,3.4,171.7,119.4,137.5,193.7" transform="translate(-9.7 -9.3)"/>
|
||||
<path class="cls-5" d="M362.5,229.5C339.7,279,273.1,299.4,225,300c-60.6.7-134.7-29.5-153.5-86.4C45.6,135.4,132.2,32.6,225,35.8,321.1,39.2,396.7,155.2,362.5,229.5Z" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="leftear" aria-label="Left Ear">
|
||||
<path id="outer" class="cls-1" d="M92.7,117c-2.6,4.7-14.7-16.1-16.5-45-3.3-27.7,3.7-63.4,5.4-62C80.7,8,117,10,143,20c27.5,8.9,44.7,25.7,39.5,27.1-30,23.4-59.9,46.6-89.8,69.9" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="inner" class="cls-6" d="M105.8,106.9C103.9,110.3,95.3,95.5,94,75c-2.3-19.6,2.6-44.9,3.8-44-0.6-1.4,25.1,0,43.6,7.1,19.5,6.3,31.7,18.2,28,19.2q-31.8,24.9-63.6,49.6" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<path id="mask" class="cls-2" d="M338.4,142.5c-2.2,3.3,19.4,19.6,17.2,23.2s-24.3-7.8-25.8-5.2c-1.9,3.3,33.4,24.1,31,29.2-2.3,4.9-34-14.4-84.3-18.1a141.76,141.76,0,0,1-16.4-2.1,91.21,91.21,0,0,1-13.7-3.9c-19.8-6.9-27.7-10.6-32.7-12-19.3-5.7-26.8,11.3-68.1,22.4-18.8,5-37.9,9.7-54.4,0-2.1-1.3-13.6-8.3-16.7-21.1-0.9-3.6-2.8-15.2,10.5-34C146.3,34.3,216.5,34,217.3,34a131.52,131.52,0,0,1,58.4,14.3c-7.6,4.9-11.2,9.5-9,10.1,21.5,16.5,43.1,33,64.6,49.5,0.9,1.7,3.6-1.3,6.3-7.3,19.3,30.5,22.1,41.5,18.9,44.3-3.8,3.6-16.4-4.8-18.1-2.4" transform="translate(-9.7 -9.3)"/>
|
||||
<g id="rightear">
|
||||
<path id="outer-2" data-name="outer" class="cls-2" d="M344.9,119.9c2.6,4.7,14.7-16.1,16.5-45,3.3-27.7-3.7-63.4-5.4-62,0.9-2-35.4,0-61.4,10-27.5,8.9-44.7,25.7-39.5,27.1q44.85,35,89.8,69.9" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="inner-2" data-name="inner" class="cls-6" d="M343.5,76.2a77.83,77.83,0,0,1-5.6,24.6c-15.1-20.3-36-39.8-61-52.4a82,82,0,0,1,19.2-9.1c18.5-7.1,44.2-8.5,43.6-7.1,1.2-.9,6.1,24.4,3.8,44" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="nose">
|
||||
<path class="cls-7" d="M205.1,201.8l-10.6-18.3a9,9,0,0,1,7.7-13.4h21.2a8.9,8.9,0,0,1,7.7,13.4l-10.6,18.3a8.91,8.91,0,0,1-15.4,0" transform="translate(-9.7 -9.3)"/>
|
||||
<path class="cls-6" d="M194.2,175.1a9,9,0,0,0,.3,8.4l10.6,18.3a8.92,8.92,0,0,0,15.5,0l8.7-15c-5.8-6.2-19.3-10.1-35.1-11.7" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="mouth">
|
||||
<path class="cls-8" d="M166.7,260.4c-24.4,0-44.1-25-44.1-55.9m88.2,0c0,30.9-19.7,55.9-44.1,55.9m89.9,0c24.4,0,44.1-25,44.1-55.9m-88.2,0c0,30.9,19.7,55.9,44.1,55.9" transform="translate(-9.7 -9.3)"/>
|
||||
<path class="cls-9" d="M300.7,204.5a65.16,65.16,0,0,1-8,32" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<path id="wiskers" class="cls-10" d="M188.7,198.4c0-12.9-72.7-23.3-162.6-23.3m162.6,36.2c0-7.1-65.8-12.9-147.1-12.9m196,1.3c1.4-12.8,74.8-15.6,164.1-6.2m-165.4,19c0.7-7.1,66.8-5.9,147.6,2.6" transform="translate(-9.7 -9.3)"/>
|
||||
<g id="lefteye" class="eye">
|
||||
<path id="iris" class="cls-4" d="M188.6,141.5s-18.3,12.3-35.8,7.9-30-15.2-27.7-24c1.5-6,9.6-9.6,20.2-9.8a59.5,59.5,0,0,1,15.7,1.9,35.75,35.75,0,0,1,12.5,6.2,60,60,0,0,1,15.1,17.8" transform="translate(-9.7 -9.3)"/>
|
||||
<path class="cls-11" d="M125.1,123.6c1.5-6,9.6-9.6,20.1-9.8a59.5,59.5,0,0,1,15.7,1.9,35.75,35.75,0,0,1,12.5,6.2,59.47,59.47,0,0,1,15.2,17.8" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="pupil" class="cls-12" d="M172.9,124.3c-2.3,9.2-10.7,15-18.7,13s-12.5-11.1-10.2-20.4a22.39,22.39,0,0,1,1.1-3.1,59.5,59.5,0,0,1,15.7,1.9,35.75,35.75,0,0,1,12.5,6.2,8.6,8.6,0,0,1-.4,2.4" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="eyelash" class="cls-13" d="M124.9,121.5c-7.6,2.6-17.1-4.7-21.1-16.3m33.6,9.5c-7.5,2.9-17.3-4-21.7-15.5m36.7,14.6c-8.1-.1-14.5-10.2-14.3-22.6" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="reflection" class="cls-14" d="M156.8,122c0,3.6-2.6,6.4-5.8,6.4s-5.8-2.9-5.8-6.4,2.6-6.4,5.8-6.4,5.8,2.9,5.8,6.4" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="righteye" class="eye">
|
||||
<path id="iris-2" data-name="iris" class="cls-4" d="M241.4,143.6s18.5,11.9,36,7.1,29.6-15.8,27.2-24.6c-1.7-6-9.8-9.4-20.3-9.4a59.21,59.21,0,0,0-15.6,2.2,37.44,37.44,0,0,0-12.4,6.4,60.14,60.14,0,0,0-14.9,18.3" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="lid" class="cls-11" d="M304.5,124.4c-1.7-6-9.8-9.4-20.3-9.4a59.21,59.21,0,0,0-15.6,2.2,37.44,37.44,0,0,0-12.4,6.4,61.21,61.21,0,0,0-14.9,18.1" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="pupil-2" data-name="pupil" class="cls-12" d="M256.7,126.1c2.5,9.2,11,14.8,18.9,12.6s12.3-11.4,9.8-20.6a16.59,16.59,0,0,0-1.2-3.1,59.21,59.21,0,0,0-15.6,2.2,37.44,37.44,0,0,0-12.4,6.4,9.23,9.23,0,0,0,.5,2.5" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="eyelash-2" data-name="eyelash" class="cls-13" d="M302.9,122.3c7.7,2.5,17-5,20.8-16.8M292,115.7c7.6,2.8,17.2-4.4,21.4-16M277,115.1c8.1-.3,14.3-10.5,13.9-22.8" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="reflection-2" data-name="reflection" class="cls-14" d="M271.1,127.1c0,3.6-2.6,6.5-5.8,6.5s-5.8-2.9-5.8-6.5,2.6-6.4,5.8-6.4,5.8,2.9,5.8,6.4" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.7 KiB |
56
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/ariaDataTest.svg
vendored
Normal file
@ -0,0 +1,56 @@
|
||||
<svg version="1" id="cat" viewBox="0 0 720 800" aria-labelledby="catTitle catDesc" role="img">
|
||||
<title id="catTitle" arial-dontallow="nope">Pixels, My Super-friendly Cat</title>
|
||||
<desc id="catDesc">An illustrated gray cat with bright green blinking eyes.</desc>
|
||||
<path id="tail" data-name="tail" class="cls-1" d="M545.9,695.9c8,28.2,23.2,42.3,27.2,46.9,21.4,24.1,41.5,40.2,81.1,42.9s65.4-14.2,60.8-26.8-23.1-9.1-51.3-8.3c-35.2.9-66.6-31.3-74.8-63.9s-7.9-63.8-36.8-85.5c-44.1-33-135.6-7.1-159.8-3.4s-48.4,52.5-9.6,45.1,91.4-23.1,123.2-12.7C537.8,640.4,537.9,667.7,545.9,695.9Z" transform="translate(-9.7 -9.3)"/>
|
||||
<g id="body">
|
||||
<path id="bg" class="cls-2" d="M447.9,502.1c2.1,151.7-108.3,167-216.5,167S9.7,663.8,9.7,510.9,85,242.9,231.3,241,445.8,350.4,447.9,502.1h0Z" transform="translate(-9.7 -9.3)"/>
|
||||
<g id="leftleg" datas-dontallow="nope">
|
||||
<path id="leg" class="cls-1" d="M195.6,671.5c-34.2-7.7-40.6-95.6-53.3-191-12-90-90.1-177.2-55.1-177.2s145.7,12,151.4,87.7S261.5,686.5,195.6,671.5Z" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="foot" class="cls-3" d="M172.2,688.1c31.6,2.1,56.6-8.7,59.8-32.4s-22.1-49.5-27.3-24.3c25-16.4-39.1-29.4-27.6-3.9,14-24.9-49.6-19.2-31.9-.1-6.5-27.2-35.6,8.2-30.1,29.3C121.5,681.8,140.5,686,172.2,688.1Z" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="rightleg">
|
||||
<path id="leg-2" data-name="leg" class="cls-1" d="M260.4,670.4c42.4-9.2,48.7-87.7,53.9-185.2,5.1-96,98.2-176.1,63.1-176.1s-164,15.7-164,111.8C213.4,420.9,199.1,683.7,260.4,670.4Z" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="foot-2" data-name="foot" class="cls-3" d="M279.4,689.8c-31.7,2-56.6-9-59.6-32.6s22.3-49.4,27.4-24.1c-24.9-16.5,39.2-29.2,27.6-3.8-13.9-25,49.7-18.9,31.9,0,6.6-27.1,35.6,8.4,30,29.4-6.7,25-25.7,29.1-57.3,31.1h0Z" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<path id="tuft" aria-haspopup="false" class="cls-3" d="M80,331.2c3.5,9.5,1.2,28.9,4.3,32.7s31.5-30,43-20.6c10.7,8.7,1.7,55.9,12.9,64.5,10.1,7.7,32.1-50.6,52.5-38.7,24.9,14.6,34.1,49.9,49,49.9,18.3,0,7.5-49.5,24.1-53.3s46.1,52.6,60.2,45.6c4.8-2.4,3-50.4,12-57.6,8.7-6.9,30.5,22.4,33.5,18.9,3.7-4.1.1-23.1,8.6-36.1,3.4-5.2,18.9-2.6,28.8-.4a3.46,3.46,0,0,0,3.7-5.2c-19.6-30.8-100-147.4-184.2-147.4-93.3,0-150.9,86.8-178.1,141.6a3.43,3.43,0,0,0,3.6,4.9C63,328.4,78.4,326.6,80,331.2Z" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="head">
|
||||
<path id="collar" class="cls-4" d="M367,231.1c5.7,36.1-4.7,71-97.8,85.6s-184-18.5-189.7-54.5,16.7-17.3,109.8-31.9,172-35.3,177.7.8" transform="translate(-9.7 -9.3)"/>
|
||||
<g id="bg-2" data-name="bg">
|
||||
<path class="cls-1" d="M362.5,229.5C339.7,279,273.1,299.4,225,300c-60.6.7-134.7-29.5-153.5-86.4C45.6,135.4,132.2,32.6,225,35.8c96.1,3.4,171.7,119.4,137.5,193.7" transform="translate(-9.7 -9.3)"/>
|
||||
<path class="cls-5" d="M362.5,229.5C339.7,279,273.1,299.4,225,300c-60.6.7-134.7-29.5-153.5-86.4C45.6,135.4,132.2,32.6,225,35.8,321.1,39.2,396.7,155.2,362.5,229.5Z" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="leftear" aria-label="Left Ear">
|
||||
<path id="outer" class="cls-1" d="M92.7,117c-2.6,4.7-14.7-16.1-16.5-45-3.3-27.7,3.7-63.4,5.4-62C80.7,8,117,10,143,20c27.5,8.9,44.7,25.7,39.5,27.1-30,23.4-59.9,46.6-89.8,69.9" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="inner" class="cls-6" d="M105.8,106.9C103.9,110.3,95.3,95.5,94,75c-2.3-19.6,2.6-44.9,3.8-44-0.6-1.4,25.1,0,43.6,7.1,19.5,6.3,31.7,18.2,28,19.2q-31.8,24.9-63.6,49.6" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<path id="mask" class="cls-2" d="M338.4,142.5c-2.2,3.3,19.4,19.6,17.2,23.2s-24.3-7.8-25.8-5.2c-1.9,3.3,33.4,24.1,31,29.2-2.3,4.9-34-14.4-84.3-18.1a141.76,141.76,0,0,1-16.4-2.1,91.21,91.21,0,0,1-13.7-3.9c-19.8-6.9-27.7-10.6-32.7-12-19.3-5.7-26.8,11.3-68.1,22.4-18.8,5-37.9,9.7-54.4,0-2.1-1.3-13.6-8.3-16.7-21.1-0.9-3.6-2.8-15.2,10.5-34C146.3,34.3,216.5,34,217.3,34a131.52,131.52,0,0,1,58.4,14.3c-7.6,4.9-11.2,9.5-9,10.1,21.5,16.5,43.1,33,64.6,49.5,0.9,1.7,3.6-1.3,6.3-7.3,19.3,30.5,22.1,41.5,18.9,44.3-3.8,3.6-16.4-4.8-18.1-2.4" transform="translate(-9.7 -9.3)"/>
|
||||
<g id="rightear">
|
||||
<path id="outer-2" data-name="outer" class="cls-2" d="M344.9,119.9c2.6,4.7,14.7-16.1,16.5-45,3.3-27.7-3.7-63.4-5.4-62,0.9-2-35.4,0-61.4,10-27.5,8.9-44.7,25.7-39.5,27.1q44.85,35,89.8,69.9" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="inner-2" data-name="inner" class="cls-6" d="M343.5,76.2a77.83,77.83,0,0,1-5.6,24.6c-15.1-20.3-36-39.8-61-52.4a82,82,0,0,1,19.2-9.1c18.5-7.1,44.2-8.5,43.6-7.1,1.2-.9,6.1,24.4,3.8,44" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="nose">
|
||||
<path class="cls-7" d="M205.1,201.8l-10.6-18.3a9,9,0,0,1,7.7-13.4h21.2a8.9,8.9,0,0,1,7.7,13.4l-10.6,18.3a8.91,8.91,0,0,1-15.4,0" transform="translate(-9.7 -9.3)"/>
|
||||
<path class="cls-6" d="M194.2,175.1a9,9,0,0,0,.3,8.4l10.6,18.3a8.92,8.92,0,0,0,15.5,0l8.7-15c-5.8-6.2-19.3-10.1-35.1-11.7" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="mouth">
|
||||
<path class="cls-8" d="M166.7,260.4c-24.4,0-44.1-25-44.1-55.9m88.2,0c0,30.9-19.7,55.9-44.1,55.9m89.9,0c24.4,0,44.1-25,44.1-55.9m-88.2,0c0,30.9,19.7,55.9,44.1,55.9" transform="translate(-9.7 -9.3)"/>
|
||||
<path class="cls-9" d="M300.7,204.5a65.16,65.16,0,0,1-8,32" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<path id="wiskers" class="cls-10" d="M188.7,198.4c0-12.9-72.7-23.3-162.6-23.3m162.6,36.2c0-7.1-65.8-12.9-147.1-12.9m196,1.3c1.4-12.8,74.8-15.6,164.1-6.2m-165.4,19c0.7-7.1,66.8-5.9,147.6,2.6" transform="translate(-9.7 -9.3)"/>
|
||||
<g id="lefteye" class="eye">
|
||||
<path id="iris" class="cls-4" d="M188.6,141.5s-18.3,12.3-35.8,7.9-30-15.2-27.7-24c1.5-6,9.6-9.6,20.2-9.8a59.5,59.5,0,0,1,15.7,1.9,35.75,35.75,0,0,1,12.5,6.2,60,60,0,0,1,15.1,17.8" transform="translate(-9.7 -9.3)"/>
|
||||
<path class="cls-11" d="M125.1,123.6c1.5-6,9.6-9.6,20.1-9.8a59.5,59.5,0,0,1,15.7,1.9,35.75,35.75,0,0,1,12.5,6.2,59.47,59.47,0,0,1,15.2,17.8" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="pupil" class="cls-12" d="M172.9,124.3c-2.3,9.2-10.7,15-18.7,13s-12.5-11.1-10.2-20.4a22.39,22.39,0,0,1,1.1-3.1,59.5,59.5,0,0,1,15.7,1.9,35.75,35.75,0,0,1,12.5,6.2,8.6,8.6,0,0,1-.4,2.4" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="eyelash" class="cls-13" d="M124.9,121.5c-7.6,2.6-17.1-4.7-21.1-16.3m33.6,9.5c-7.5,2.9-17.3-4-21.7-15.5m36.7,14.6c-8.1-.1-14.5-10.2-14.3-22.6" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="reflection" class="cls-14" d="M156.8,122c0,3.6-2.6,6.4-5.8,6.4s-5.8-2.9-5.8-6.4,2.6-6.4,5.8-6.4,5.8,2.9,5.8,6.4" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
<g id="righteye" class="eye">
|
||||
<path id="iris-2" data-name="iris" class="cls-4" d="M241.4,143.6s18.5,11.9,36,7.1,29.6-15.8,27.2-24.6c-1.7-6-9.8-9.4-20.3-9.4a59.21,59.21,0,0,0-15.6,2.2,37.44,37.44,0,0,0-12.4,6.4,60.14,60.14,0,0,0-14.9,18.3" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="lid" class="cls-11" d="M304.5,124.4c-1.7-6-9.8-9.4-20.3-9.4a59.21,59.21,0,0,0-15.6,2.2,37.44,37.44,0,0,0-12.4,6.4,61.21,61.21,0,0,0-14.9,18.1" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="pupil-2" data-name="pupil" class="cls-12" d="M256.7,126.1c2.5,9.2,11,14.8,18.9,12.6s12.3-11.4,9.8-20.6a16.59,16.59,0,0,0-1.2-3.1,59.21,59.21,0,0,0-15.6,2.2,37.44,37.44,0,0,0-12.4,6.4,9.23,9.23,0,0,0,.5,2.5" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="eyelash-2" data-name="eyelash" class="cls-13" d="M302.9,122.3c7.7,2.5,17-5,20.8-16.8M292,115.7c7.6,2.8,17.2-4.4,21.4-16M277,115.1c8.1-.3,14.3-10.5,13.9-22.8" transform="translate(-9.7 -9.3)"/>
|
||||
<path id="reflection-2" data-name="reflection" class="cls-14" d="M271.1,127.1c0,3.6-2.6,6.5-5.8,6.5s-5.8-2.9-5.8-6.5,2.6-6.4,5.8-6.4,5.8,2.9,5.8,6.4" transform="translate(-9.7 -9.3)"/>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 7.7 KiB |
15
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/badXmlTestOne.svg
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="600px" height="600px" viewBox="0 0 600 600" enable-background="new 0 0 600 600" xml:space="preserve">
|
||||
<line onload="alert(2)" fill="none" stroke="#000000" stroke-miterlimit="10" x1="119" y1="84.5" x2="454" y2="84.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="111.212" y1="102.852" x2="112.032" y2="476.623"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="198.917" y1="510.229" x2="486.622" y2="501.213">
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="484.163" y1="442.196" x2="89.901" y2="60.229"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="101.376" y1="478.262" x2="443.18" y2="75.803"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="457.114" y1="126.623" x2="458.753" y2="363.508"/>
|
||||
<this>shouldn't be here</this>
|
||||
<script>alert(1);</script>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="541.54" y1="299.573" x2="543.179" y2="536.458"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
4
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/entityClean.svg
vendored
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<text x="0" y="20" font-size="20">&lab;</text>
|
||||
</svg>
|
After Width: | Height: | Size: 152 B |
5
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/entityTest.svg
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!DOCTYPE fortiguard [ <!ENTITY lab "cool, text as an image">]>
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<text x="0" y="20" font-size="20">&lab;</text>
|
||||
</svg>
|
10
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/externalClean.svg
vendored
Normal file
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" xml:space="preserve">
|
||||
<rect x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect fill="url('/benis.svg')" x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect fill="url('#benis.svg')" x="0" y="0" width="1000" height="1000"></rect>
|
||||
</svg>
|
After Width: | Height: | Size: 587 B |
11
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/externalTest.svg
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve">
|
||||
<rect fill="url('http://example.com/benis.svg')" x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect fill="url('https://example.com/benis.svg')" x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect fill=" url( ' https://example.com/benis.svg ' ) " x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect fill="url('ftp://192.168.2.1/benis.svg')" x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect fill="url('//example.com/benis.svg')" x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect fill="url('/benis.svg')" x="0" y="0" width="1000" height="1000"></rect>
|
||||
<rect fill="url('#benis.svg')" x="0" y="0" width="1000" height="1000"></rect>
|
||||
</svg>
|
After Width: | Height: | Size: 906 B |
12
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/hrefCleanOne.svg
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="600px" id="Layer_1" width="600px" x="0px" y="0px" xml:space="preserve">
|
||||
<a>test 1</a>
|
||||
<a>test 2</a>
|
||||
<a href="#test3">test 3</a>
|
||||
<a xlink:href="#test">test 4</a>
|
||||
|
||||
<a>test 5</a>
|
||||
<a>test 6</a>
|
||||
|
||||
<a>test 7</a>
|
||||
<a>test 8</a>
|
||||
</svg>
|
After Width: | Height: | Size: 348 B |
12
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/hrefCleanTwo.svg
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="600px" id="Layer_1" width="600px" x="0px" y="0px" xml:space="preserve">
|
||||
<a>test 1</a>
|
||||
<a>test 2</a>
|
||||
<a href="#test3">test 3</a>
|
||||
<a xlink:href="#test">test 4</a>
|
||||
|
||||
<a>test 5</a>
|
||||
<a>test 6</a>
|
||||
|
||||
<a>test 7</a>
|
||||
<a>test 8</a>
|
||||
</svg>
|
After Width: | Height: | Size: 305 B |
12
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/hrefTestOne.svg
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" height="600px" id="Layer_1" width="600px" x="0px" y="0px" xml:space="preserve">
|
||||
<a href="javascript:alert(2)">test 1</a>
|
||||
<a xlink:href="javascript:alert(2)">test 2</a>
|
||||
<a href="#test3">test 3</a>
|
||||
<a xlink:href="#test">test 4</a>
|
||||
|
||||
<a href="data:data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' onload='alert(88)'%3E%3C/svg%3E">test 5</a>
|
||||
<a xlink:href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' onload='alert(88)'%3E%3C/svg%3E">test 6</a>
|
||||
|
||||
<a href="javascript	:alert(document.domain)">test 7</a>
|
||||
<a href="javascrip	t:alert('0xd0ff9')">test 8</a>
|
||||
</svg>
|
After Width: | Height: | Size: 703 B |
12
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/hrefTestTwo.svg
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="600px" id="Layer_1" width="600px" x="0px" y="0px" xml:space="preserve">
|
||||
<a href="javascript:alert(2)">test 1</a>
|
||||
<a xlink:href="javascript:alert(2)">test 2</a>
|
||||
<a href="#test3">test 3</a>
|
||||
<a xlink:href="#test">test 4</a>
|
||||
|
||||
<a href="data:data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' onload='alert(88)'%3E%3C/svg%3E">test 5</a>
|
||||
<a xlink:href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' onload='alert(88)'%3E%3C/svg%3E">test 6</a>
|
||||
|
||||
<a href="javascript	:alert(document.domain)">test 7</a>
|
||||
<a href="javascrip	t:alert('0xd0ff9')">test 8</a>
|
||||
</svg>
|
After Width: | Height: | Size: 660 B |
12
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/svgCleanOne.svg
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" version="1.1" x="0px" y="0px" width="600px" height="600px" viewBox="0 0 600 600" xml:space="preserve">
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="119" y1="84.5" x2="454" y2="84.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="111.212" y1="102.852" x2="112.032" y2="476.623"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="198.917" y1="510.229" x2="486.622" y2="501.213"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="484.163" y1="442.196" x2="89.901" y2="60.229"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="101.376" y1="478.262" x2="443.18" y2="75.803"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="457.114" y1="126.623" x2="458.753" y2="363.508"/>
|
||||
|
||||
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="541.54" y1="299.573" x2="543.179" y2="536.458"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1011 B |
@ -0,0 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" x="0px" y="0px" width="600px" height="600px" viewBox="0 0 600 600" version="1.1" xml:space="preserve"> <line fill="none" stroke="#000000" stroke-miterlimit="10" x1="119" y1="84.5" x2="454" y2="84.5"></line> <line fill="none" stroke="#000000" stroke-miterlimit="10" x1="111.212" y1="102.852" x2="112.032" y2="476.623"></line> <line fill="none" stroke="#000000" stroke-miterlimit="10" x1="198.917" y1="510.229" x2="486.622" y2="501.213"></line> <line fill="none" stroke="#000000" stroke-miterlimit="10" x1="484.163" y1="442.196" x2="89.901" y2="60.229"></line> <line fill="none" stroke="#000000" stroke-miterlimit="10" x1="101.376" y1="478.262" x2="443.18" y2="75.803"></line> <line fill="none" stroke="#000000" stroke-miterlimit="10" x1="457.114" y1="126.623" x2="458.753" y2="363.508"></line> <line fill="none" stroke="#000000" stroke-miterlimit="10" x1="541.54" y1="299.573" x2="543.179" y2="536.458"></line> </svg>
|
After Width: | Height: | Size: 1012 B |
15
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/svgTestOne.svg
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="600px" height="600px" viewBox="0 0 600 600" enable-background="new 0 0 600 600" xml:space="preserve">
|
||||
<line onload="alert(2)" fill="none" stroke="#000000" stroke-miterlimit="10" x1="119" y1="84.5" x2="454" y2="84.5"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="111.212" y1="102.852" x2="112.032" y2="476.623"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="198.917" y1="510.229" x2="486.622" y2="501.213"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="484.163" y1="442.196" x2="89.901" y2="60.229"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="101.376" y1="478.262" x2="443.18" y2="75.803"/>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="457.114" y1="126.623" x2="458.753" y2="363.508"/>
|
||||
<this>shouldn't be here</this>
|
||||
<script>alert(1);</script>
|
||||
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="541.54" y1="299.573" x2="543.179" y2="536.458"/>
|
||||
</svg>
|
After Width: | Height: | Size: 1.3 KiB |
5
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/useClean.svg
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 68 65">
|
||||
<use xlink:href="#a" x="28" fill="#1A374D"/>
|
||||
<path id="a" d="M14 27v-20c0-3.7-3.3-7-7-7s-7 3.3-7 7v41c0 8.2 9.2 17 20 17s20-9.2 20-20c0-13.3-13.4-21.8-26-18zm6 25c-4 0-7-3-7-7s3-7 7-7 7 3 7 7-3 7-7 7z"/>
|
||||
<use />
|
||||
</svg>
|
After Width: | Height: | Size: 334 B |
113
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/useDosClean.svg
vendored
Normal file
@ -0,0 +1,113 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 10 10">
|
||||
<defs>
|
||||
<g id="thing">
|
||||
<g id="t0a"></g>
|
||||
<g id="t0b"></g>
|
||||
<g id="t1a"></g>
|
||||
<g id="t1b"></g>
|
||||
<g id="t2a"></g>
|
||||
<g id="t2b"></g>
|
||||
<g id="t3a"></g>
|
||||
<g id="t3b"></g>
|
||||
<g id="t4a"></g>
|
||||
<g id="t4b"></g>
|
||||
<g id="t5a"></g>
|
||||
<g id="t5b"></g>
|
||||
<g id="t6a"></g>
|
||||
<g id="t6b"></g>
|
||||
<g id="t7a"></g>
|
||||
<g id="t7b"></g>
|
||||
<g id="t8a"></g>
|
||||
<g id="t8b"></g>
|
||||
<g id="t9a"></g>
|
||||
<g id="t9b"></g>
|
||||
<g id="t10a"></g>
|
||||
<g id="t10b"></g>
|
||||
<g id="t11a"></g>
|
||||
<g id="t11b"></g>
|
||||
<g id="t12a"></g>
|
||||
<g id="t12b"></g>
|
||||
<g id="t13a"></g>
|
||||
<g id="t13b"></g>
|
||||
<g id="t14a"></g>
|
||||
<g id="t14b"></g>
|
||||
<g id="t15a"></g>
|
||||
<g id="t15b"></g>
|
||||
<g id="t16a"></g>
|
||||
<g id="t16b"></g>
|
||||
<g id="t17a"></g>
|
||||
<g id="t17b"></g>
|
||||
<g id="t18a"></g>
|
||||
<g id="t18b"></g>
|
||||
<g id="t19a"></g>
|
||||
<g id="t19b"></g>
|
||||
<g id="t20a"></g>
|
||||
<g id="t20b"></g>
|
||||
<g id="t21a"></g>
|
||||
<g id="t21b"></g>
|
||||
<g id="t22a"></g>
|
||||
<g id="t22b"></g>
|
||||
<g id="t23a"></g>
|
||||
<g id="t23b"></g>
|
||||
<g id="t24a"></g>
|
||||
<g id="t24b"></g>
|
||||
<g id="t25a"></g>
|
||||
<g id="t25b"></g>
|
||||
<g id="t26a"></g>
|
||||
<g id="t26b"></g>
|
||||
<g id="t27a"></g>
|
||||
<g id="t27b"></g>
|
||||
<g id="t28a"></g>
|
||||
<g id="t28b"></g>
|
||||
<g id="t29a"></g>
|
||||
<g id="t29b"></g>
|
||||
<g id="t30a"></g>
|
||||
<g id="t30b"></g>
|
||||
<g id="t31a"></g>
|
||||
<g id="t31b"></g>
|
||||
<g id="t32a"></g>
|
||||
<g id="t32b"></g>
|
||||
<g id="t33a"></g>
|
||||
<g id="t33b"></g>
|
||||
<g id="t34a"></g>
|
||||
<g id="t34b"></g>
|
||||
<g id="t35a"></g>
|
||||
<g id="t35b"></g>
|
||||
<g id="t36a"></g>
|
||||
<g id="t36b"></g>
|
||||
<g id="t37a"></g>
|
||||
<g id="t37b"></g>
|
||||
<g id="t38a"></g>
|
||||
<g id="t38b"></g>
|
||||
<g id="t39a"></g>
|
||||
<g id="t39b"></g>
|
||||
<g id="t40a"></g>
|
||||
<g id="t40b"></g>
|
||||
<g id="t41a"></g>
|
||||
<g id="t41b"></g>
|
||||
<g id="t42a"></g>
|
||||
<g id="t42b"></g>
|
||||
<g id="t43a"></g>
|
||||
<g id="t43b"></g>
|
||||
<g id="t44a"></g>
|
||||
<g id="t44b"></g>
|
||||
<g id="t45a"></g>
|
||||
<g id="t45b"></g>
|
||||
<g id="t46a"></g>
|
||||
<g id="t46b"></g>
|
||||
<g id="t47a"></g>
|
||||
<g id="t47b"></g>
|
||||
<g id="t48a"></g>
|
||||
<g id="t48b"></g>
|
||||
<g id="t49a"></g>
|
||||
<g id="t49b"></g>
|
||||
<g id="t50a">
|
||||
<circle cx="0" cy="0" r="5"></circle>
|
||||
</g>
|
||||
<g id="t50b">
|
||||
<circle cx="0" cy="0" r="5"></circle>
|
||||
</g>
|
||||
</g>
|
||||
</defs>
|
||||
</svg>
|
After Width: | Height: | Size: 3.3 KiB |
20013
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/useDosCleanTwo.svg
vendored
Normal file
After Width: | Height: | Size: 506 KiB |
129
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/useDosTest.svg
vendored
Normal file
@ -0,0 +1,129 @@
|
||||
<svg viewBox="0 0 10 10" xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
|
||||
|
||||
<defs>
|
||||
|
||||
<g id="thing">
|
||||
|
||||
|
||||
<g id="t0a"><use xlink:href="#t1a"/><use xlink:href="#t1b"/></g>
|
||||
<g id="t0b"><use xlink:href="#t1a"/><use xlink:href="#t1b"/></g>
|
||||
<g id="t1a"><use xlink:href="#t2a"/><use xlink:href="#t2b"/></g>
|
||||
<g id="t1b"><use xlink:href="#t2a"/><use xlink:href="#t2b"/></g>
|
||||
<g id="t2a"><use xlink:href="#t3a"/><use xlink:href="#t3b"/></g>
|
||||
<g id="t2b"><use xlink:href="#t3a"/><use xlink:href="#t3b"/></g>
|
||||
<g id="t3a"><use xlink:href="#t4a"/><use xlink:href="#t4b"/></g>
|
||||
<g id="t3b"><use xlink:href="#t4a"/><use xlink:href="#t4b"/></g>
|
||||
<g id="t4a"><use xlink:href="#t5a"/><use xlink:href="#t5b"/></g>
|
||||
<g id="t4b"><use xlink:href="#t5a"/><use xlink:href="#t5b"/></g>
|
||||
<g id="t5a"><use xlink:href="#t6a"/><use xlink:href="#t6b"/></g>
|
||||
<g id="t5b"><use xlink:href="#t6a"/><use xlink:href="#t6b"/></g>
|
||||
<g id="t6a"><use xlink:href="#t7a"/><use xlink:href="#t7b"/></g>
|
||||
<g id="t6b"><use xlink:href="#t7a"/><use xlink:href="#t7b"/></g>
|
||||
<g id="t7a"><use xlink:href="#t8a"/><use xlink:href="#t8b"/></g>
|
||||
<g id="t7b"><use xlink:href="#t8a"/><use xlink:href="#t8b"/></g>
|
||||
<g id="t8a"><use xlink:href="#t9a"/><use xlink:href="#t9b"/></g>
|
||||
<g id="t8b"><use xlink:href="#t9a"/><use xlink:href="#t9b"/></g>
|
||||
<g id="t9a"><use xlink:href="#t10a"/><use xlink:href="#t10b"/></g>
|
||||
<g id="t9b"><use xlink:href="#t10a"/><use xlink:href="#t10b"/></g>
|
||||
<g id="t10a"><use xlink:href="#t11a"/><use xlink:href="#t11b"/></g>
|
||||
<g id="t10b"><use xlink:href="#t11a"/><use xlink:href="#t11b"/></g>
|
||||
<g id="t11a"><use xlink:href="#t12a"/><use xlink:href="#t12b"/></g>
|
||||
<g id="t11b"><use xlink:href="#t12a"/><use xlink:href="#t12b"/></g>
|
||||
<g id="t12a"><use xlink:href="#t13a"/><use xlink:href="#t13b"/></g>
|
||||
<g id="t12b"><use xlink:href="#t13a"/><use xlink:href="#t13b"/></g>
|
||||
<g id="t13a"><use xlink:href="#t14a"/><use xlink:href="#t14b"/></g>
|
||||
<g id="t13b"><use xlink:href="#t14a"/><use xlink:href="#t14b"/></g>
|
||||
<g id="t14a"><use xlink:href="#t15a"/><use xlink:href="#t15b"/></g>
|
||||
<g id="t14b"><use xlink:href="#t15a"/><use xlink:href="#t15b"/></g>
|
||||
<g id="t15a"><use xlink:href="#t16a"/><use xlink:href="#t16b"/></g>
|
||||
<g id="t15b"><use xlink:href="#t16a"/><use xlink:href="#t16b"/></g>
|
||||
<g id="t16a"><use xlink:href="#t17a"/><use xlink:href="#t17b"/></g>
|
||||
<g id="t16b"><use xlink:href="#t17a"/><use xlink:href="#t17b"/></g>
|
||||
<g id="t17a"><use xlink:href="#t18a"/><use xlink:href="#t18b"/></g>
|
||||
<g id="t17b"><use xlink:href="#t18a"/><use xlink:href="#t18b"/></g>
|
||||
<g id="t18a"><use xlink:href="#t19a"/><use xlink:href="#t19b"/></g>
|
||||
<g id="t18b"><use xlink:href="#t19a"/><use xlink:href="#t19b"/></g>
|
||||
<g id="t19a"><use xlink:href="#t20a"/><use xlink:href="#t20b"/></g>
|
||||
<g id="t19b"><use xlink:href="#t20a"/><use xlink:href="#t20b"/></g>
|
||||
<g id="t20a"><use xlink:href="#t21a"/><use xlink:href="#t21b"/></g>
|
||||
<g id="t20b"><use xlink:href="#t21a"/><use xlink:href="#t21b"/></g>
|
||||
<g id="t21a"><use xlink:href="#t22a"/><use xlink:href="#t22b"/></g>
|
||||
<g id="t21b"><use xlink:href="#t22a"/><use xlink:href="#t22b"/></g>
|
||||
<g id="t22a"><use xlink:href="#t23a"/><use xlink:href="#t23b"/></g>
|
||||
<g id="t22b"><use xlink:href="#t23a"/><use xlink:href="#t23b"/></g>
|
||||
<g id="t23a"><use xlink:href="#t24a"/><use xlink:href="#t24b"/></g>
|
||||
<g id="t23b"><use xlink:href="#t24a"/><use xlink:href="#t24b"/></g>
|
||||
<g id="t24a"><use xlink:href="#t25a"/><use xlink:href="#t25b"/></g>
|
||||
<g id="t24b"><use xlink:href="#t25a"/><use xlink:href="#t25b"/></g>
|
||||
<g id="t25a"><use xlink:href="#t26a"/><use xlink:href="#t26b"/></g>
|
||||
<g id="t25b"><use xlink:href="#t26a"/><use xlink:href="#t26b"/></g>
|
||||
<g id="t26a"><use xlink:href="#t27a"/><use xlink:href="#t27b"/></g>
|
||||
<g id="t26b"><use xlink:href="#t27a"/><use xlink:href="#t27b"/></g>
|
||||
<g id="t27a"><use xlink:href="#t28a"/><use xlink:href="#t28b"/></g>
|
||||
<g id="t27b"><use xlink:href="#t28a"/><use xlink:href="#t28b"/></g>
|
||||
<g id="t28a"><use xlink:href="#t29a"/><use xlink:href="#t29b"/></g>
|
||||
<g id="t28b"><use xlink:href="#t29a"/><use xlink:href="#t29b"/></g>
|
||||
<g id="t29a"><use xlink:href="#t30a"/><use xlink:href="#t30b"/></g>
|
||||
<g id="t29b"><use xlink:href="#t30a"/><use xlink:href="#t30b"/></g>
|
||||
<g id="t30a"><use xlink:href="#t31a"/><use xlink:href="#t31b"/></g>
|
||||
<g id="t30b"><use xlink:href="#t31a"/><use xlink:href="#t31b"/></g>
|
||||
<g id="t31a"><use xlink:href="#t32a"/><use xlink:href="#t32b"/></g>
|
||||
<g id="t31b"><use xlink:href="#t32a"/><use xlink:href="#t32b"/></g>
|
||||
<g id="t32a"><use xlink:href="#t33a"/><use xlink:href="#t33b"/></g>
|
||||
<g id="t32b"><use xlink:href="#t33a"/><use xlink:href="#t33b"/></g>
|
||||
<g id="t33a"><use xlink:href="#t34a"/><use xlink:href="#t34b"/></g>
|
||||
<g id="t33b"><use xlink:href="#t34a"/><use xlink:href="#t34b"/></g>
|
||||
<g id="t34a"><use xlink:href="#t35a"/><use xlink:href="#t35b"/></g>
|
||||
<g id="t34b"><use xlink:href="#t35a"/><use xlink:href="#t35b"/></g>
|
||||
<g id="t35a"><use xlink:href="#t36a"/><use xlink:href="#t36b"/></g>
|
||||
<g id="t35b"><use xlink:href="#t36a"/><use xlink:href="#t36b"/></g>
|
||||
<g id="t36a"><use xlink:href="#t37a"/><use xlink:href="#t37b"/></g>
|
||||
<g id="t36b"><use xlink:href="#t37a"/><use xlink:href="#t37b"/></g>
|
||||
<g id="t37a"><use xlink:href="#t38a"/><use xlink:href="#t38b"/></g>
|
||||
<g id="t37b"><use xlink:href="#t38a"/><use xlink:href="#t38b"/></g>
|
||||
<g id="t38a"><use xlink:href="#t39a"/><use xlink:href="#t39b"/></g>
|
||||
<g id="t38b"><use xlink:href="#t39a"/><use xlink:href="#t39b"/></g>
|
||||
<g id="t39a"><use xlink:href="#t40a"/><use xlink:href="#t40b"/></g>
|
||||
<g id="t39b"><use xlink:href="#t40a"/><use xlink:href="#t40b"/></g>
|
||||
<g id="t40a"><use xlink:href="#t41a"/><use xlink:href="#t41b"/></g>
|
||||
<g id="t40b"><use xlink:href="#t41a"/><use xlink:href="#t41b"/></g>
|
||||
<g id="t41a"><use xlink:href="#t42a"/><use xlink:href="#t42b"/></g>
|
||||
<g id="t41b"><use xlink:href="#t42a"/><use xlink:href="#t42b"/></g>
|
||||
<g id="t42a"><use xlink:href="#t43a"/><use xlink:href="#t43b"/></g>
|
||||
<g id="t42b"><use xlink:href="#t43a"/><use xlink:href="#t43b"/></g>
|
||||
<g id="t43a"><use xlink:href="#t44a"/><use xlink:href="#t44b"/></g>
|
||||
<g id="t43b"><use xlink:href="#t44a"/><use xlink:href="#t44b"/></g>
|
||||
<g id="t44a"><use xlink:href="#t45a"/><use xlink:href="#t45b"/></g>
|
||||
<g id="t44b"><use xlink:href="#t45a"/><use xlink:href="#t45b"/></g>
|
||||
<g id="t45a"><use xlink:href="#t46a"/><use xlink:href="#t46b"/></g>
|
||||
<g id="t45b"><use xlink:href="#t46a"/><use xlink:href="#t46b"/></g>
|
||||
<g id="t46a"><use xlink:href="#t47a"/><use xlink:href="#t47b"/></g>
|
||||
<g id="t46b"><use xlink:href="#t47a"/><use xlink:href="#t47b"/></g>
|
||||
<g id="t47a"><use xlink:href="#t48a"/><use xlink:href="#t48b"/></g>
|
||||
<g id="t47b"><use xlink:href="#t48a"/><use xlink:href="#t48b"/></g>
|
||||
<g id="t48a"><use xlink:href="#t49a"/><use xlink:href="#t49b"/></g>
|
||||
<g id="t48b"><use xlink:href="#t49a"/><use xlink:href="#t49b"/></g>
|
||||
<g id="t49a"><use xlink:href="#t50a"/><use xlink:href="#t50b"/></g>
|
||||
<g id="t49b"><use xlink:href="#t50a"/><use xlink:href="#t50b"/></g>
|
||||
|
||||
|
||||
|
||||
<g id="t50a">
|
||||
<circle cx="0" cy="0" r="5" />
|
||||
</g>
|
||||
|
||||
<g id="t50b">
|
||||
<circle cx="0" cy="0" r="5" />
|
||||
</g>
|
||||
|
||||
|
||||
</g>
|
||||
|
||||
</defs>
|
||||
|
||||
<use x="5" y="5" xlink:href="#thing"/>
|
||||
|
||||
|
||||
</svg>
|
After Width: | Height: | Size: 8.2 KiB |
100029
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/useDosTestTwo.svg
vendored
Normal file
After Width: | Height: | Size: 1.5 MiB |
5
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/useTest.svg
vendored
Normal file
@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 68 65">
|
||||
<use xlink:href="#a" x="28" fill="#1A374D"/>
|
||||
<path id="a" d="M14 27v-20c0-3.7-3.3-7-7-7s-7 3.3-7 7v41c0 8.2 9.2 17 20 17s20-9.2 20-20c0-13.3-13.4-21.8-26-18zm6 25c-4 0-7-3-7-7s3-7 7-7 7 3 7 7-3 7-7 7z"/>
|
||||
<use xlink:href="defs.svg#icon-1"/>
|
||||
</svg>
|
After Width: | Height: | Size: 362 B |
69
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/xlinkLaughsClean.svg
vendored
Normal file
@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="512" height="512" version="1.1">
|
||||
<defs>
|
||||
<g id="a0">
|
||||
<circle stroke="#000000" fill="#ffffff" fill-opacity="0.1" r="10"/>
|
||||
</g>
|
||||
</defs><defs>
|
||||
<g id="a1">
|
||||
<use x="0" y="10" xlink:href="#a0" />
|
||||
<use x="10" y="10" xlink:href="#a0" />
|
||||
<use x="20" y="10" xlink:href="#a0" />
|
||||
<use x="30" y="10" xlink:href="#a0" />
|
||||
<use x="40" y="10" xlink:href="#a0" />
|
||||
<use x="50" y="10" xlink:href="#a0" />
|
||||
<use x="60" y="10" xlink:href="#a0" />
|
||||
<use x="70" y="10" xlink:href="#a0" />
|
||||
<use x="80" y="10" xlink:href="#a0" />
|
||||
<use x="90" y="10" xlink:href="#a0" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a2">
|
||||
<use x="0" y="10" xlink:href="#a1" />
|
||||
<use x="10" y="10" xlink:href="#a1" />
|
||||
<use x="20" y="10" xlink:href="#a1" />
|
||||
<use x="30" y="10" xlink:href="#a1" />
|
||||
<use x="40" y="10" xlink:href="#a1" />
|
||||
<use x="50" y="10" xlink:href="#a1" />
|
||||
<use x="60" y="10" xlink:href="#a1" />
|
||||
<use x="70" y="10" xlink:href="#a1" />
|
||||
<use x="80" y="10" xlink:href="#a1" />
|
||||
<use x="90" y="10" xlink:href="#a1" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a3">
|
||||
<use x="0" y="10" xlink:href="#a2" />
|
||||
<use x="10" y="10" xlink:href="#a2" />
|
||||
<use x="20" y="10" xlink:href="#a2" />
|
||||
<use x="30" y="10" xlink:href="#a2" />
|
||||
<use x="40" y="10" xlink:href="#a2" />
|
||||
<use x="50" y="10" xlink:href="#a2" />
|
||||
<use x="60" y="10" xlink:href="#a2" />
|
||||
<use x="70" y="10" xlink:href="#a2" />
|
||||
<use x="80" y="10" xlink:href="#a2" />
|
||||
<use x="90" y="10" xlink:href="#a2" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a4" />
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a5" />
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a6" />
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a7" />
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a8" />
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a9" />
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a10" />
|
||||
</defs></svg>
|
After Width: | Height: | Size: 1.8 KiB |
146
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/xlinkLaughsTest.svg
vendored
Normal file
@ -0,0 +1,146 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<svg viewBox="0 0 512 512" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="512" height="512">
|
||||
<defs>
|
||||
<g id="a0">
|
||||
<circle stroke="#000000" fill="#ffffff" fill-opacity="0.1" r="10"/>
|
||||
</g>
|
||||
</defs><defs>
|
||||
<g id="a1">
|
||||
<use x="0" y="10" xlink:href="#a0" />
|
||||
<use x="10" y="10" xlink:href="#a0" />
|
||||
<use x="20" y="10" xlink:href="#a0" />
|
||||
<use x="30" y="10" xlink:href="#a0" />
|
||||
<use x="40" y="10" xlink:href="#a0" />
|
||||
<use x="50" y="10" xlink:href="#a0" />
|
||||
<use x="60" y="10" xlink:href="#a0" />
|
||||
<use x="70" y="10" xlink:href="#a0" />
|
||||
<use x="80" y="10" xlink:href="#a0" />
|
||||
<use x="90" y="10" xlink:href="#a0" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a2">
|
||||
<use x="0" y="10" xlink:href="#a1" />
|
||||
<use x="10" y="10" xlink:href="#a1" />
|
||||
<use x="20" y="10" xlink:href="#a1" />
|
||||
<use x="30" y="10" xlink:href="#a1" />
|
||||
<use x="40" y="10" xlink:href="#a1" />
|
||||
<use x="50" y="10" xlink:href="#a1" />
|
||||
<use x="60" y="10" xlink:href="#a1" />
|
||||
<use x="70" y="10" xlink:href="#a1" />
|
||||
<use x="80" y="10" xlink:href="#a1" />
|
||||
<use x="90" y="10" xlink:href="#a1" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a3">
|
||||
<use x="0" y="10" xlink:href="#a2" />
|
||||
<use x="10" y="10" xlink:href="#a2" />
|
||||
<use x="20" y="10" xlink:href="#a2" />
|
||||
<use x="30" y="10" xlink:href="#a2" />
|
||||
<use x="40" y="10" xlink:href="#a2" />
|
||||
<use x="50" y="10" xlink:href="#a2" />
|
||||
<use x="60" y="10" xlink:href="#a2" />
|
||||
<use x="70" y="10" xlink:href="#a2" />
|
||||
<use x="80" y="10" xlink:href="#a2" />
|
||||
<use x="90" y="10" xlink:href="#a2" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a4">
|
||||
<use x="0" y="10" xlink:href="#a3" />
|
||||
<use x="10" y="10" xlink:href="#a3" />
|
||||
<use x="20" y="10" xlink:href="#a3" />
|
||||
<use x="30" y="10" xlink:href="#a3" />
|
||||
<use x="40" y="10" xlink:href="#a3" />
|
||||
<use x="50" y="10" xlink:href="#a3" />
|
||||
<use x="60" y="10" xlink:href="#a3" />
|
||||
<use x="70" y="10" xlink:href="#a3" />
|
||||
<use x="80" y="10" xlink:href="#a3" />
|
||||
<use x="90" y="10" xlink:href="#a3" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a5">
|
||||
<use x="0" y="10" xlink:href="#a4" />
|
||||
<use x="10" y="10" xlink:href="#a4" />
|
||||
<use x="20" y="10" xlink:href="#a4" />
|
||||
<use x="30" y="10" xlink:href="#a4" />
|
||||
<use x="40" y="10" xlink:href="#a4" />
|
||||
<use x="50" y="10" xlink:href="#a4" />
|
||||
<use x="60" y="10" xlink:href="#a4" />
|
||||
<use x="70" y="10" xlink:href="#a4" />
|
||||
<use x="80" y="10" xlink:href="#a4" />
|
||||
<use x="90" y="10" xlink:href="#a4" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a6">
|
||||
<use x="0" y="10" xlink:href="#a5" />
|
||||
<use x="10" y="10" xlink:href="#a5" />
|
||||
<use x="20" y="10" xlink:href="#a5" />
|
||||
<use x="30" y="10" xlink:href="#a5" />
|
||||
<use x="40" y="10" xlink:href="#a5" />
|
||||
<use x="50" y="10" xlink:href="#a5" />
|
||||
<use x="60" y="10" xlink:href="#a5" />
|
||||
<use x="70" y="10" xlink:href="#a5" />
|
||||
<use x="80" y="10" xlink:href="#a5" />
|
||||
<use x="90" y="10" xlink:href="#a5" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a7">
|
||||
<use x="0" y="10" xlink:href="#a6" />
|
||||
<use x="10" y="10" xlink:href="#a6" />
|
||||
<use x="20" y="10" xlink:href="#a6" />
|
||||
<use x="30" y="10" xlink:href="#a6" />
|
||||
<use x="40" y="10" xlink:href="#a6" />
|
||||
<use x="50" y="10" xlink:href="#a6" />
|
||||
<use x="60" y="10" xlink:href="#a6" />
|
||||
<use x="70" y="10" xlink:href="#a6" />
|
||||
<use x="80" y="10" xlink:href="#a6" />
|
||||
<use x="90" y="10" xlink:href="#a6" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a8">
|
||||
<use x="0" y="10" xlink:href="#a7" />
|
||||
<use x="10" y="10" xlink:href="#a7" />
|
||||
<use x="20" y="10" xlink:href="#a7" />
|
||||
<use x="30" y="10" xlink:href="#a7" />
|
||||
<use x="40" y="10" xlink:href="#a7" />
|
||||
<use x="50" y="10" xlink:href="#a7" />
|
||||
<use x="60" y="10" xlink:href="#a7" />
|
||||
<use x="70" y="10" xlink:href="#a7" />
|
||||
<use x="80" y="10" xlink:href="#a7" />
|
||||
<use x="90" y="10" xlink:href="#a7" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a9">
|
||||
<use x="0" y="10" xlink:href="#a8" />
|
||||
<use x="10" y="10" xlink:href="#a8" />
|
||||
<use x="20" y="10" xlink:href="#a8" />
|
||||
<use x="30" y="10" xlink:href="#a8" />
|
||||
<use x="40" y="10" xlink:href="#a8" />
|
||||
<use x="50" y="10" xlink:href="#a8" />
|
||||
<use x="60" y="10" xlink:href="#a8" />
|
||||
<use x="70" y="10" xlink:href="#a8" />
|
||||
<use x="80" y="10" xlink:href="#a8" />
|
||||
<use x="90" y="10" xlink:href="#a8" />
|
||||
</g>
|
||||
</defs>
|
||||
<defs>
|
||||
<g id="a10">
|
||||
<use x="0" y="10" xlink:href="#a9" />
|
||||
<use x="10" y="10" xlink:href="#a9" />
|
||||
<use x="20" y="10" xlink:href="#a9" />
|
||||
<use x="30" y="10" xlink:href="#a9" />
|
||||
<use x="40" y="10" xlink:href="#a9" />
|
||||
<use x="50" y="10" xlink:href="#a9" />
|
||||
<use x="60" y="10" xlink:href="#a9" />
|
||||
<use x="70" y="10" xlink:href="#a9" />
|
||||
<use x="80" y="10" xlink:href="#a9" />
|
||||
<use x="90" y="10" xlink:href="#a9" />
|
||||
</g>
|
||||
</defs><use x="0" y="0" xlink:href="#a9" /></svg>
|
After Width: | Height: | Size: 4.6 KiB |
24
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/xlinkLoopClean.svg
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- ping:pong section to be removed -->
|
||||
<g id="ping">
|
||||
<text style="font-weight: 700;" x="50" y="50">Ping</text>
|
||||
</g>
|
||||
<g id="pong">
|
||||
<text x="50" y="100" style="font-weight: 700">Pong</text>
|
||||
</g>
|
||||
<!-- nested loop -->
|
||||
<g id="first">
|
||||
<text style="font-weight: 700;" x="50" y="50">1st</text>
|
||||
</g>
|
||||
<g id="second">
|
||||
<text style="font-weight: 700;" x="50" y="50">2nd</text>
|
||||
</g>
|
||||
<g id="third">
|
||||
<text style="font-weight: 700;" x="50" y="50">3rd</text>
|
||||
</g>
|
||||
<g id="fourth">
|
||||
<text style="font-weight: 700;" x="50" y="50">4th</text>
|
||||
</g>
|
||||
<!-- self reference to be removed -->
|
||||
</svg>
|
After Width: | Height: | Size: 769 B |
31
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/xlinkLoopTest.svg
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<svg viewBox="0 0 500 500" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<!-- ping:pong section to be removed -->
|
||||
<g id="ping">
|
||||
<text style="font-weight: 700;" x="50" y="50">Ping</text>
|
||||
<use href="#pong" />
|
||||
</g>
|
||||
<g id="pong">
|
||||
<text x="50" y="100" style="font-weight: 700">Pong</text>
|
||||
<use href="#ping" />
|
||||
</g>
|
||||
<!-- nested loop -->
|
||||
<g id="first">
|
||||
<text style="font-weight: 700;" x="50" y="50">1st</text>
|
||||
<use href="#second" />
|
||||
</g>
|
||||
<g id="second">
|
||||
<text style="font-weight: 700;" x="50" y="50">2nd</text>
|
||||
<use href="#third" />
|
||||
</g>
|
||||
<g id="third">
|
||||
<text style="font-weight: 700;" x="50" y="50">3rd</text>
|
||||
<use href="#fourth" />
|
||||
</g>
|
||||
<g id="fourth">
|
||||
<text style="font-weight: 700;" x="50" y="50">4th</text>
|
||||
<use href="#first" />
|
||||
</g>
|
||||
<!-- self reference to be removed -->
|
||||
<use id="self" xlink:href="#self" />
|
||||
</svg>
|
After Width: | Height: | Size: 964 B |
11
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/xmlCleanOne.xml
vendored
Normal file
@ -0,0 +1,11 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<image/>
|
||||
<svg/>
|
||||
|
||||
<defs/>
|
||||
<g>
|
||||
<circle/>
|
||||
<text/>
|
||||
</g>
|
||||
|
||||
</svg>
|
After Width: | Height: | Size: 136 B |
12
wp-content/plugins/svg-support/vendor/enshrined/svg-sanitize/tests/data/xmlTestOne.xml
vendored
Normal file
@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg">
|
||||
<test></test>
|
||||
<image onload="alert(1)"></image>
|
||||
<svg onload="alert(2)"></svg>
|
||||
<script>alert(3)</script>
|
||||
<defs onload="alert(4)"></defs>
|
||||
<g onload="alert(5)">
|
||||
<circle onload="alert(6)" />
|
||||
<text onload="alert(7)"></text>
|
||||
</g>
|
||||
<ø:script src="//0x.lv/" />
|
||||
</svg>
|
After Width: | Height: | Size: 348 B |