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>')],
       '&lt;em&gt;foo&lt;/em&gt;',
     ];
+    // #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