From 018bd7c5e2c2656cf6e9ee84c94473ee9aecea42 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Mon, 14 May 2018 09:47:42 +0100 Subject: [PATCH] Issue #2765609 by c31ck, gnuget, hgoto, Yogesh Pawar, weboide, alexpott: #plain_text doesn't render empty-like values (e.g. 0 and "0") --- core/lib/Drupal/Core/Render/Renderer.php | 8 +--- .../Drupal/Tests/Core/Render/RendererTest.php | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 6 deletions(-) diff --git a/core/lib/Drupal/Core/Render/Renderer.php b/core/lib/Drupal/Core/Render/Renderer.php index 5e1b8d1b8dd1..1c3618443033 100644 --- a/core/lib/Drupal/Core/Render/Renderer.php +++ b/core/lib/Drupal/Core/Render/Renderer.php @@ -380,7 +380,7 @@ protected function doRender(&$elements, $is_root_call = FALSE) { } // All render elements support #markup and #plain_text. - if (!empty($elements['#markup']) || !empty($elements['#plain_text'])) { + if (isset($elements['#markup']) || isset($elements['#plain_text'])) { $elements = $this->ensureMarkupIsSafe($elements); } @@ -744,11 +744,7 @@ protected function xssFilterAdminIfUnsafe($string) { * @see \Drupal\Component\Utility\Xss::filterAdmin() */ protected function ensureMarkupIsSafe(array $elements) { - if (empty($elements['#markup']) && empty($elements['#plain_text'])) { - return $elements; - } - - if (!empty($elements['#plain_text'])) { + if (isset($elements['#plain_text'])) { $elements['#markup'] = Markup::create(Html::escape($elements['#plain_text'])); } elseif (!($elements['#markup'] instanceof MarkupInterface)) { diff --git a/core/tests/Drupal/Tests/Core/Render/RendererTest.php b/core/tests/Drupal/Tests/Core/Render/RendererTest.php index adfc890cb08a..54037c57e9c4 100644 --- a/core/tests/Drupal/Tests/Core/Render/RendererTest.php +++ b/core/tests/Drupal/Tests/Core/Render/RendererTest.php @@ -89,6 +89,26 @@ public function providerTestRenderBasic() { ['#markup' => 'foo'], 'foo', ]; + // Basic #markup based renderable array with value '0'. + $data[] = [ + ['#markup' => '0'], + '0', + ]; + // Basic #markup based renderable array with value 0. + $data[] = [ + ['#markup' => 0], + '0', + ]; + // Basic #markup based renderable array with value ''. + $data[] = [ + ['#markup' => ''], + '', + ]; + // Basic #markup based renderable array with value NULL. + $data[] = [ + ['#markup' => NULL], + '', + ]; // Basic #plain_text based renderable array. $data[] = [ ['#plain_text' => 'foo'], @@ -104,6 +124,26 @@ public function providerTestRenderBasic() { ['#plain_text' => Markup::create('<em>foo</em>')], '<em>foo</em>', ]; + // #plain_text based renderable array with value '0'. + $data[] = [ + ['#plain_text' => '0'], + '0', + ]; + // #plain_text based renderable array with value 0. + $data[] = [ + ['#plain_text' => 0], + '0', + ]; + // #plain_text based renderable array with value ''. + $data[] = [ + ['#plain_text' => ''], + '', + ]; + // #plain_text based renderable array with value NULL. + $data[] = [ + ['#plain_text' => NULL], + '', + ]; // Renderable child element. $data[] = [ ['child' => ['#markup' => 'bar']], -- GitLab