![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/mautic.corals.io/vendor/symfony/messenger/Transport/Serialization/ |
<?php /* * This file is part of the Symfony package. * * (c) Fabien Potencier <[email protected]> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Messenger\Transport\Serialization; use Symfony\Component\Messenger\Envelope; use Symfony\Component\Messenger\Exception\MessageDecodingFailedException; use Symfony\Component\Messenger\Stamp\NonSendableStampInterface; /** * @author Ryan Weaver<[email protected]> */ class PhpSerializer implements SerializerInterface { public function decode(array $encodedEnvelope): Envelope { if (empty($encodedEnvelope['body'])) { throw new MessageDecodingFailedException('Encoded envelope should have at least a "body", or maybe you should implement your own serializer.'); } if (!str_ends_with($encodedEnvelope['body'], '}')) { $encodedEnvelope['body'] = base64_decode($encodedEnvelope['body']); } $serializeEnvelope = stripslashes($encodedEnvelope['body']); return $this->safelyUnserialize($serializeEnvelope); } public function encode(Envelope $envelope): array { $envelope = $envelope->withoutStampsOfType(NonSendableStampInterface::class); $body = addslashes(serialize($envelope)); if (!preg_match('//u', $body)) { $body = base64_encode($body); } return [ 'body' => $body, ]; } private function safelyUnserialize(string $contents) { if ('' === $contents) { throw new MessageDecodingFailedException('Could not decode an empty message using PHP serialization.'); } $prevUnserializeHandler = ini_set('unserialize_callback_func', self::class.'::handleUnserializeCallback'); $prevErrorHandler = set_error_handler(function ($type, $msg, $file, $line, $context = []) use (&$prevErrorHandler) { if (__FILE__ === $file) { throw new \ErrorException($msg, 0, $type, $file, $line); } return $prevErrorHandler ? $prevErrorHandler($type, $msg, $file, $line, $context) : false; }); try { /** @var Envelope */ $envelope = unserialize($contents); } catch (\Throwable $e) { if ($e instanceof MessageDecodingFailedException) { throw $e; } throw new MessageDecodingFailedException('Could not decode Envelope: '.$e->getMessage(), 0, $e); } finally { restore_error_handler(); ini_set('unserialize_callback_func', $prevUnserializeHandler); } return $envelope; } /** * @internal */ public static function handleUnserializeCallback(string $class) { throw new MessageDecodingFailedException(sprintf('Message class "%s" not found during decoding.', $class)); } }