Skip to content

Commit

Permalink
[HttpFoundation] work around PHP 7.3 bug related to json_encode()
Browse files Browse the repository at this point in the history
  • Loading branch information
nicolas-grekas committed Jun 4, 2019
1 parent 5498cf5 commit e6e6301
Show file tree
Hide file tree
Showing 6 changed files with 35 additions and 1 deletion.
Expand Up @@ -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");
}

Expand Down
9 changes: 8 additions & 1 deletion src/Symfony/Component/Console/Descriptor/JsonDescriptor.php
Expand Up @@ -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));
}

/**
Expand Down
Expand Up @@ -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");
}

Expand Down
5 changes: 5 additions & 0 deletions src/Symfony/Component/HttpFoundation/JsonResponse.php
Expand Up @@ -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) {
Expand Down
5 changes: 5 additions & 0 deletions src/Symfony/Component/Serializer/Encoder/JsonEncode.php
Expand Up @@ -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))) {
Expand Down
5 changes: 5 additions & 0 deletions src/Symfony/Component/Translation/Dumper/JsonFileDumper.php
Expand Up @@ -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);
}

Expand Down

0 comments on commit e6e6301

Please sign in to comment.