From aae55174f69dd1e079f7c79323469189b902f1e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Thomas=20M=C3=BCller?= <thomas.mueller@tmit.eu>
Date: Tue, 30 Jun 2015 12:20:28 +0200
Subject: [PATCH] Only do the description kung-fu on strings - fixes #17028

---
 lib/private/app.php | 34 +++++++++++++++++++---------------
 tests/lib/app.php   |  4 ++++
 2 files changed, 23 insertions(+), 15 deletions(-)

diff --git a/lib/private/app.php b/lib/private/app.php
index 1a32fcfcf7..d5e07ffdbc 100644
--- a/lib/private/app.php
+++ b/lib/private/app.php
@@ -1223,23 +1223,27 @@ class OC_App {
 		// just modify the description if it is available
 		// otherwise this will create a $data element with an empty 'description'
 		if (isset($data['description'])) {
-			// sometimes the description contains line breaks and they are then also
-			// shown in this way in the app management which isn't wanted as HTML
-			// manages line breaks itself
-
-			// first of all we split on empty lines
-			$paragraphs = preg_split("!\n[[:space:]]*\n!mu", $data['description']);
-
-			$result = [];
-			foreach ($paragraphs as $value) {
-				// replace multiple whitespace (tabs, space, newlines) inside a paragraph
-				// with a single space - also trims whitespace
-				$result[] = trim(preg_replace('![[:space:]]+!mu', ' ', $value));
-			}
+			if (is_string($data['description'])) {
+				// sometimes the description contains line breaks and they are then also
+				// shown in this way in the app management which isn't wanted as HTML
+				// manages line breaks itself
+
+				// first of all we split on empty lines
+				$paragraphs = preg_split("!\n[[:space:]]*\n!mu", $data['description']);
+
+				$result = [];
+				foreach ($paragraphs as $value) {
+					// replace multiple whitespace (tabs, space, newlines) inside a paragraph
+					// with a single space - also trims whitespace
+					$result[] = trim(preg_replace('![[:space:]]+!mu', ' ', $value));
+				}
 
-			// join the single paragraphs with a empty line in between
-			$data['description'] = implode("\n\n", $result);
+				// join the single paragraphs with a empty line in between
+				$data['description'] = implode("\n\n", $result);
 
+			} else {
+				$data['description'] = '';
+			}
 		}
 
 		return $data;
diff --git a/tests/lib/app.php b/tests/lib/app.php
index 9724c6e234..485091cee4 100644
--- a/tests/lib/app.php
+++ b/tests/lib/app.php
@@ -510,6 +510,10 @@ class Test_App extends \Test\TestCase {
 				['not-a-description' => " \t  This is a multiline \n test with \n \t   some new lines   "],
 				['not-a-description' => " \t  This is a multiline \n test with \n \t   some new lines   "]
 			],
+			[
+				['description' => [100, 'bla']],
+				['description' => ""]
+			],
 		];
 	}
 
-- 
GitLab