From e6e63017f07ef1830f1e9d3818120ed0a5593d32 Mon Sep 17 00:00:00 2001 From: Nicolas Grekas Date: Tue, 4 Jun 2019 20:42:06 +0200 Subject: [PATCH] [HttpFoundation] work around PHP 7.3 bug related to json_encode() --- .../Console/Descriptor/JsonDescriptor.php | 6 ++++++ .../Component/Console/Descriptor/JsonDescriptor.php | 9 ++++++++- .../Component/Form/Console/Descriptor/JsonDescriptor.php | 6 ++++++ src/Symfony/Component/HttpFoundation/JsonResponse.php | 5 +++++ src/Symfony/Component/Serializer/Encoder/JsonEncode.php | 5 +++++ .../Component/Translation/Dumper/JsonFileDumper.php | 5 +++++ 6 files changed, 35 insertions(+), 1 deletion(-) diff --git a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php index 6b05612ff53d9..2e00fc2262317 100644 --- a/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php +++ b/src/Symfony/Bundle/FrameworkBundle/Console/Descriptor/JsonDescriptor.php @@ -185,6 +185,12 @@ protected function describeContainerParameter($parameter, array $options = []) private function writeData(array $data, array $options) { $flags = isset($options['json_encoding']) ? $options['json_encoding'] : 0; + + if (\PHP_VERSION_ID >= 70300 && (JSON_THROW_ON_ERROR & $flags)) { + // Work around https://bugs.php.net/77997 + json_encode(null); + } + $this->write(json_encode($data, $flags | JSON_PRETTY_PRINT)."\n"); } diff --git a/src/Symfony/Component/Console/Descriptor/JsonDescriptor.php b/src/Symfony/Component/Console/Descriptor/JsonDescriptor.php index 197b843d4b76c..529fb82c4029f 100644 --- a/src/Symfony/Component/Console/Descriptor/JsonDescriptor.php +++ b/src/Symfony/Component/Console/Descriptor/JsonDescriptor.php @@ -97,7 +97,14 @@ protected function describeApplication(Application $application, array $options */ private function writeData(array $data, array $options) { - $this->write(json_encode($data, isset($options['json_encoding']) ? $options['json_encoding'] : 0)); + $flags = isset($options['json_encoding']) ? $options['json_encoding'] : 0; + + if (\PHP_VERSION_ID >= 70300 && (JSON_THROW_ON_ERROR & $flags)) { + // Work around https://bugs.php.net/77997 + json_encode(null); + } + + $this->write(json_encode($data, $flags)); } /** diff --git a/src/Symfony/Component/Form/Console/Descriptor/JsonDescriptor.php b/src/Symfony/Component/Form/Console/Descriptor/JsonDescriptor.php index ab518dbfeed12..00a5425866b29 100644 --- a/src/Symfony/Component/Form/Console/Descriptor/JsonDescriptor.php +++ b/src/Symfony/Component/Form/Console/Descriptor/JsonDescriptor.php @@ -82,6 +82,12 @@ protected function describeOption(OptionsResolver $optionsResolver, array $optio private function writeData(array $data, array $options) { $flags = isset($options['json_encoding']) ? $options['json_encoding'] : 0; + + if (\PHP_VERSION_ID >= 70300 && (JSON_THROW_ON_ERROR & $flags)) { + // Work around https://bugs.php.net/77997 + json_encode(null); + } + $this->output->write(json_encode($data, $flags | JSON_PRETTY_PRINT)."\n"); } diff --git a/src/Symfony/Component/HttpFoundation/JsonResponse.php b/src/Symfony/Component/HttpFoundation/JsonResponse.php index 6fb32ee41bdac..52f55f7486c97 100644 --- a/src/Symfony/Component/HttpFoundation/JsonResponse.php +++ b/src/Symfony/Component/HttpFoundation/JsonResponse.php @@ -153,6 +153,11 @@ public function setData($data = []) restore_error_handler(); } } else { + if (\PHP_VERSION_ID >= 70300 && (JSON_THROW_ON_ERROR & $this->encodingOptions)) { + // Work around https://bugs.php.net/77997 + json_encode(null); + } + try { $data = json_encode($data, $this->encodingOptions); } catch (\Exception $e) { diff --git a/src/Symfony/Component/Serializer/Encoder/JsonEncode.php b/src/Symfony/Component/Serializer/Encoder/JsonEncode.php index 9b07d709b8cff..e5b48757dd0c2 100644 --- a/src/Symfony/Component/Serializer/Encoder/JsonEncode.php +++ b/src/Symfony/Component/Serializer/Encoder/JsonEncode.php @@ -36,6 +36,11 @@ public function encode($data, $format, array $context = []) { $context = $this->resolveContext($context); + if (\PHP_VERSION_ID >= 70300 && (JSON_THROW_ON_ERROR & $context['json_encode_options'])) { + // Work around https://bugs.php.net/77997 + json_encode(null); + } + $encodedJson = json_encode($data, $context['json_encode_options']); if (JSON_ERROR_NONE !== json_last_error() && (false === $encodedJson || !($context['json_encode_options'] & JSON_PARTIAL_OUTPUT_ON_ERROR))) { diff --git a/src/Symfony/Component/Translation/Dumper/JsonFileDumper.php b/src/Symfony/Component/Translation/Dumper/JsonFileDumper.php index 3ee446dc73183..2a8d23d477e21 100644 --- a/src/Symfony/Component/Translation/Dumper/JsonFileDumper.php +++ b/src/Symfony/Component/Translation/Dumper/JsonFileDumper.php @@ -31,6 +31,11 @@ public function formatCatalogue(MessageCatalogue $messages, $domain, array $opti $flags = \defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 0; } + if (\PHP_VERSION_ID >= 70300 && (JSON_THROW_ON_ERROR & $flags)) { + // Work around https://bugs.php.net/77997 + json_encode(null); + } + return json_encode($messages->all($domain), $flags); } pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy