diff options
| author | polo <ordipolo@gmx.fr> | 2024-08-13 23:45:21 +0200 |
|---|---|---|
| committer | polo <ordipolo@gmx.fr> | 2024-08-13 23:45:21 +0200 |
| commit | bf6655a534a6775d30cafa67bd801276bda1d98d (patch) | |
| tree | c6381e3f6c81c33eab72508f410b165ba05f7e9c /vendor/symfony/cache/Marshaller | |
| parent | 94d67a4b51f8e62e7d518cce26a526ae1ec48278 (diff) | |
| download | AppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.tar.gz AppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.tar.bz2 AppliGestionPHP-bf6655a534a6775d30cafa67bd801276bda1d98d.zip | |
VERSION 0.2 doctrine ORM et entités
Diffstat (limited to 'vendor/symfony/cache/Marshaller')
5 files changed, 337 insertions, 0 deletions
diff --git a/vendor/symfony/cache/Marshaller/DefaultMarshaller.php b/vendor/symfony/cache/Marshaller/DefaultMarshaller.php new file mode 100644 index 0000000..34bbeb8 --- /dev/null +++ b/vendor/symfony/cache/Marshaller/DefaultMarshaller.php | |||
| @@ -0,0 +1,98 @@ | |||
| 1 | <?php | ||
| 2 | |||
| 3 | /* | ||
| 4 | * This file is part of the Symfony package. | ||
| 5 | * | ||
| 6 | * (c) Fabien Potencier <fabien@symfony.com> | ||
| 7 | * | ||
| 8 | * For the full copyright and license information, please view the LICENSE | ||
| 9 | * file that was distributed with this source code. | ||
| 10 | */ | ||
| 11 | |||
| 12 | namespace Symfony\Component\Cache\Marshaller; | ||
| 13 | |||
| 14 | use Symfony\Component\Cache\Exception\CacheException; | ||
| 15 | |||
| 16 | /** | ||
| 17 | * Serializes/unserializes values using igbinary_serialize() if available, serialize() otherwise. | ||
| 18 | * | ||
| 19 | * @author Nicolas Grekas <p@tchwork.com> | ||
| 20 | */ | ||
| 21 | class DefaultMarshaller implements MarshallerInterface | ||
| 22 | { | ||
| 23 | private bool $useIgbinarySerialize = true; | ||
| 24 | private bool $throwOnSerializationFailure = false; | ||
| 25 | |||
| 26 | public function __construct(?bool $useIgbinarySerialize = null, bool $throwOnSerializationFailure = false) | ||
| 27 | { | ||
| 28 | if (null === $useIgbinarySerialize) { | ||
| 29 | $useIgbinarySerialize = \extension_loaded('igbinary') && version_compare('3.1.6', phpversion('igbinary'), '<='); | ||
| 30 | } elseif ($useIgbinarySerialize && (!\extension_loaded('igbinary') || version_compare('3.1.6', phpversion('igbinary'), '>'))) { | ||
| 31 | throw new CacheException(\extension_loaded('igbinary') ? 'Please upgrade the "igbinary" PHP extension to v3.1.6 or higher.' : 'The "igbinary" PHP extension is not loaded.'); | ||
| 32 | } | ||
| 33 | $this->useIgbinarySerialize = $useIgbinarySerialize; | ||
| 34 | $this->throwOnSerializationFailure = $throwOnSerializationFailure; | ||
| 35 | } | ||
| 36 | |||
| 37 | public function marshall(array $values, ?array &$failed): array | ||
| 38 | { | ||
| 39 | $serialized = $failed = []; | ||
| 40 | |||
| 41 | foreach ($values as $id => $value) { | ||
| 42 | try { | ||
| 43 | if ($this->useIgbinarySerialize) { | ||
| 44 | $serialized[$id] = igbinary_serialize($value); | ||
| 45 | } else { | ||
| 46 | $serialized[$id] = serialize($value); | ||
| 47 | } | ||
| 48 | } catch (\Exception $e) { | ||
| 49 | if ($this->throwOnSerializationFailure) { | ||
| 50 | throw new \ValueError($e->getMessage(), 0, $e); | ||
| 51 | } | ||
| 52 | $failed[] = $id; | ||
| 53 | } | ||
| 54 | } | ||
| 55 | |||
| 56 | return $serialized; | ||
| 57 | } | ||
| 58 | |||
| 59 | public function unmarshall(string $value): mixed | ||
| 60 | { | ||
| 61 | if ('b:0;' === $value) { | ||
| 62 | return false; | ||
| 63 | } | ||
| 64 | if ('N;' === $value) { | ||
| 65 | return null; | ||
| 66 | } | ||
| 67 | static $igbinaryNull; | ||
| 68 | if ($value === $igbinaryNull ??= \extension_loaded('igbinary') ? igbinary_serialize(null) : false) { | ||
| 69 | return null; | ||
| 70 | } | ||
| 71 | $unserializeCallbackHandler = ini_set('unserialize_callback_func', __CLASS__.'::handleUnserializeCallback'); | ||
| 72 | try { | ||
| 73 | if (':' === ($value[1] ?? ':')) { | ||
| 74 | if (false !== $value = unserialize($value)) { | ||
| 75 | return $value; | ||
| 76 | } | ||
| 77 | } elseif (false === $igbinaryNull) { | ||
| 78 | throw new \RuntimeException('Failed to unserialize values, did you forget to install the "igbinary" extension?'); | ||
| 79 | } elseif (null !== $value = igbinary_unserialize($value)) { | ||
| 80 | return $value; | ||
| 81 | } | ||
| 82 | |||
| 83 | throw new \DomainException(error_get_last() ? error_get_last()['message'] : 'Failed to unserialize values.'); | ||
| 84 | } catch (\Error $e) { | ||
| 85 | throw new \ErrorException($e->getMessage(), $e->getCode(), \E_ERROR, $e->getFile(), $e->getLine()); | ||
| 86 | } finally { | ||
| 87 | ini_set('unserialize_callback_func', $unserializeCallbackHandler); | ||
| 88 | } | ||
| 89 | } | ||
| 90 | |||
| 91 | /** | ||
| 92 | * @internal | ||
| 93 | */ | ||
| 94 | public static function handleUnserializeCallback(string $class): never | ||
| 95 | { | ||
| 96 | throw new \DomainException('Class not found: '.$class); | ||
| 97 | } | ||
| 98 | } | ||
diff --git a/vendor/symfony/cache/Marshaller/DeflateMarshaller.php b/vendor/symfony/cache/Marshaller/DeflateMarshaller.php new file mode 100644 index 0000000..f35241c --- /dev/null +++ b/vendor/symfony/cache/Marshaller/DeflateMarshaller.php | |||
| @@ -0,0 +1,44 @@ | |||
| 1 | <?php | ||
| 2 | |||
| 3 | /* | ||
| 4 | * This file is part of the Symfony package. | ||
| 5 | * | ||
| 6 | * (c) Fabien Potencier <fabien@symfony.com> | ||
| 7 | * | ||
| 8 | * For the full copyright and license information, please view the LICENSE | ||
| 9 | * file that was distributed with this source code. | ||
| 10 | */ | ||
| 11 | |||
| 12 | namespace Symfony\Component\Cache\Marshaller; | ||
| 13 | |||
| 14 | use Symfony\Component\Cache\Exception\CacheException; | ||
| 15 | |||
| 16 | /** | ||
| 17 | * Compresses values using gzdeflate(). | ||
| 18 | * | ||
| 19 | * @author Nicolas Grekas <p@tchwork.com> | ||
| 20 | */ | ||
| 21 | class DeflateMarshaller implements MarshallerInterface | ||
| 22 | { | ||
| 23 | public function __construct( | ||
| 24 | private MarshallerInterface $marshaller, | ||
| 25 | ) { | ||
| 26 | if (!\function_exists('gzdeflate')) { | ||
| 27 | throw new CacheException('The "zlib" PHP extension is not loaded.'); | ||
| 28 | } | ||
| 29 | } | ||
| 30 | |||
| 31 | public function marshall(array $values, ?array &$failed): array | ||
| 32 | { | ||
| 33 | return array_map('gzdeflate', $this->marshaller->marshall($values, $failed)); | ||
| 34 | } | ||
| 35 | |||
| 36 | public function unmarshall(string $value): mixed | ||
| 37 | { | ||
| 38 | if (false !== $inflatedValue = @gzinflate($value)) { | ||
| 39 | $value = $inflatedValue; | ||
| 40 | } | ||
| 41 | |||
| 42 | return $this->marshaller->unmarshall($value); | ||
| 43 | } | ||
| 44 | } | ||
diff --git a/vendor/symfony/cache/Marshaller/MarshallerInterface.php b/vendor/symfony/cache/Marshaller/MarshallerInterface.php new file mode 100644 index 0000000..5b81aad --- /dev/null +++ b/vendor/symfony/cache/Marshaller/MarshallerInterface.php | |||
| @@ -0,0 +1,38 @@ | |||
| 1 | <?php | ||
| 2 | |||
| 3 | /* | ||
| 4 | * This file is part of the Symfony package. | ||
| 5 | * | ||
| 6 | * (c) Fabien Potencier <fabien@symfony.com> | ||
| 7 | * | ||
| 8 | * For the full copyright and license information, please view the LICENSE | ||
| 9 | * file that was distributed with this source code. | ||
| 10 | */ | ||
| 11 | |||
| 12 | namespace Symfony\Component\Cache\Marshaller; | ||
| 13 | |||
| 14 | /** | ||
| 15 | * Serializes/unserializes PHP values. | ||
| 16 | * | ||
| 17 | * Implementations of this interface MUST deal with errors carefully. They MUST | ||
| 18 | * also deal with forward and backward compatibility at the storage format level. | ||
| 19 | * | ||
| 20 | * @author Nicolas Grekas <p@tchwork.com> | ||
| 21 | */ | ||
| 22 | interface MarshallerInterface | ||
| 23 | { | ||
| 24 | /** | ||
| 25 | * Serializes a list of values. | ||
| 26 | * | ||
| 27 | * When serialization fails for a specific value, no exception should be | ||
| 28 | * thrown. Instead, its key should be listed in $failed. | ||
| 29 | */ | ||
| 30 | public function marshall(array $values, ?array &$failed): array; | ||
| 31 | |||
| 32 | /** | ||
| 33 | * Unserializes a single value and throws an exception if anything goes wrong. | ||
| 34 | * | ||
| 35 | * @throws \Exception Whenever unserialization fails | ||
| 36 | */ | ||
| 37 | public function unmarshall(string $value): mixed; | ||
| 38 | } | ||
diff --git a/vendor/symfony/cache/Marshaller/SodiumMarshaller.php b/vendor/symfony/cache/Marshaller/SodiumMarshaller.php new file mode 100644 index 0000000..77d16e8 --- /dev/null +++ b/vendor/symfony/cache/Marshaller/SodiumMarshaller.php | |||
| @@ -0,0 +1,74 @@ | |||
| 1 | <?php | ||
| 2 | |||
| 3 | /* | ||
| 4 | * This file is part of the Symfony package. | ||
| 5 | * | ||
| 6 | * (c) Fabien Potencier <fabien@symfony.com> | ||
| 7 | * | ||
| 8 | * For the full copyright and license information, please view the LICENSE | ||
| 9 | * file that was distributed with this source code. | ||
| 10 | */ | ||
| 11 | |||
| 12 | namespace Symfony\Component\Cache\Marshaller; | ||
| 13 | |||
| 14 | use Symfony\Component\Cache\Exception\CacheException; | ||
| 15 | use Symfony\Component\Cache\Exception\InvalidArgumentException; | ||
| 16 | |||
| 17 | /** | ||
| 18 | * Encrypt/decrypt values using Libsodium. | ||
| 19 | * | ||
| 20 | * @author Ahmed TAILOULOUTE <ahmed.tailouloute@gmail.com> | ||
| 21 | */ | ||
| 22 | class SodiumMarshaller implements MarshallerInterface | ||
| 23 | { | ||
| 24 | private MarshallerInterface $marshaller; | ||
| 25 | |||
| 26 | /** | ||
| 27 | * @param string[] $decryptionKeys The key at index "0" is required and is used to decrypt and encrypt values; | ||
| 28 | * more rotating keys can be provided to decrypt values; | ||
| 29 | * each key must be generated using sodium_crypto_box_keypair() | ||
| 30 | */ | ||
| 31 | public function __construct( | ||
| 32 | private array $decryptionKeys, | ||
| 33 | ?MarshallerInterface $marshaller = null, | ||
| 34 | ) { | ||
| 35 | if (!self::isSupported()) { | ||
| 36 | throw new CacheException('The "sodium" PHP extension is not loaded.'); | ||
| 37 | } | ||
| 38 | |||
| 39 | if (!isset($decryptionKeys[0])) { | ||
| 40 | throw new InvalidArgumentException('At least one decryption key must be provided at index "0".'); | ||
| 41 | } | ||
| 42 | |||
| 43 | $this->marshaller = $marshaller ?? new DefaultMarshaller(); | ||
| 44 | } | ||
| 45 | |||
| 46 | public static function isSupported(): bool | ||
| 47 | { | ||
| 48 | return \function_exists('sodium_crypto_box_seal'); | ||
| 49 | } | ||
| 50 | |||
| 51 | public function marshall(array $values, ?array &$failed): array | ||
| 52 | { | ||
| 53 | $encryptionKey = sodium_crypto_box_publickey($this->decryptionKeys[0]); | ||
| 54 | |||
| 55 | $encryptedValues = []; | ||
| 56 | foreach ($this->marshaller->marshall($values, $failed) as $k => $v) { | ||
| 57 | $encryptedValues[$k] = sodium_crypto_box_seal($v, $encryptionKey); | ||
| 58 | } | ||
| 59 | |||
| 60 | return $encryptedValues; | ||
| 61 | } | ||
| 62 | |||
| 63 | public function unmarshall(string $value): mixed | ||
| 64 | { | ||
| 65 | foreach ($this->decryptionKeys as $k) { | ||
| 66 | if (false !== $decryptedValue = @sodium_crypto_box_seal_open($value, $k)) { | ||
| 67 | $value = $decryptedValue; | ||
| 68 | break; | ||
| 69 | } | ||
| 70 | } | ||
| 71 | |||
| 72 | return $this->marshaller->unmarshall($value); | ||
| 73 | } | ||
| 74 | } | ||
diff --git a/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php b/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php new file mode 100644 index 0000000..825f32c --- /dev/null +++ b/vendor/symfony/cache/Marshaller/TagAwareMarshaller.php | |||
| @@ -0,0 +1,83 @@ | |||
| 1 | <?php | ||
| 2 | |||
| 3 | /* | ||
| 4 | * This file is part of the Symfony package. | ||
| 5 | * | ||
| 6 | * (c) Fabien Potencier <fabien@symfony.com> | ||
| 7 | * | ||
| 8 | * For the full copyright and license information, please view the LICENSE | ||
| 9 | * file that was distributed with this source code. | ||
| 10 | */ | ||
| 11 | |||
| 12 | namespace Symfony\Component\Cache\Marshaller; | ||
| 13 | |||
| 14 | /** | ||
| 15 | * A marshaller optimized for data structures generated by AbstractTagAwareAdapter. | ||
| 16 | * | ||
| 17 | * @author Nicolas Grekas <p@tchwork.com> | ||
| 18 | */ | ||
| 19 | class TagAwareMarshaller implements MarshallerInterface | ||
| 20 | { | ||
| 21 | private MarshallerInterface $marshaller; | ||
| 22 | |||
| 23 | public function __construct(?MarshallerInterface $marshaller = null) | ||
| 24 | { | ||
| 25 | $this->marshaller = $marshaller ?? new DefaultMarshaller(); | ||
| 26 | } | ||
| 27 | |||
| 28 | public function marshall(array $values, ?array &$failed): array | ||
| 29 | { | ||
| 30 | $failed = $notSerialized = $serialized = []; | ||
| 31 | |||
| 32 | foreach ($values as $id => $value) { | ||
| 33 | if (\is_array($value) && \is_array($value['tags'] ?? null) && \array_key_exists('value', $value) && \count($value) === 2 + (\is_string($value['meta'] ?? null) && 8 === \strlen($value['meta']))) { | ||
| 34 | // if the value is an array with keys "tags", "value" and "meta", use a compact serialization format | ||
| 35 | // magic numbers in the form 9D-..-..-..-..-00-..-..-..-5F allow detecting this format quickly in unmarshall() | ||
| 36 | |||
| 37 | $v = $this->marshaller->marshall($value, $f); | ||
| 38 | |||
| 39 | if ($f) { | ||
| 40 | $f = []; | ||
| 41 | $failed[] = $id; | ||
| 42 | } else { | ||
| 43 | if ([] === $value['tags']) { | ||
| 44 | $v['tags'] = ''; | ||
| 45 | } | ||
| 46 | |||
| 47 | $serialized[$id] = "\x9D".($value['meta'] ?? "\0\0\0\0\0\0\0\0").pack('N', \strlen($v['tags'])).$v['tags'].$v['value']; | ||
| 48 | $serialized[$id][9] = "\x5F"; | ||
| 49 | } | ||
| 50 | } else { | ||
| 51 | // other arbitrary values are serialized using the decorated marshaller below | ||
| 52 | $notSerialized[$id] = $value; | ||
| 53 | } | ||
| 54 | } | ||
| 55 | |||
| 56 | if ($notSerialized) { | ||
| 57 | $serialized += $this->marshaller->marshall($notSerialized, $f); | ||
| 58 | $failed = array_merge($failed, $f); | ||
| 59 | } | ||
| 60 | |||
| 61 | return $serialized; | ||
| 62 | } | ||
| 63 | |||
| 64 | public function unmarshall(string $value): mixed | ||
| 65 | { | ||
| 66 | // detect the compact format used in marshall() using magic numbers in the form 9D-..-..-..-..-00-..-..-..-5F | ||
| 67 | if (13 >= \strlen($value) || "\x9D" !== $value[0] || "\0" !== $value[5] || "\x5F" !== $value[9]) { | ||
| 68 | return $this->marshaller->unmarshall($value); | ||
| 69 | } | ||
| 70 | |||
| 71 | // data consists of value, tags and metadata which we need to unpack | ||
| 72 | $meta = substr($value, 1, 12); | ||
| 73 | $meta[8] = "\0"; | ||
| 74 | $tagLen = unpack('Nlen', $meta, 8)['len']; | ||
| 75 | $meta = substr($meta, 0, 8); | ||
| 76 | |||
| 77 | return [ | ||
| 78 | 'value' => $this->marshaller->unmarshall(substr($value, 13 + $tagLen)), | ||
| 79 | 'tags' => $tagLen ? $this->marshaller->unmarshall(substr($value, 13, $tagLen)) : [], | ||
| 80 | 'meta' => "\0\0\0\0\0\0\0\0" === $meta ? null : $meta, | ||
| 81 | ]; | ||
| 82 | } | ||
| 83 | } | ||
