From 3323ae78ce4e021b4ffc00b96770fc23bbbc8e47 Mon Sep 17 00:00:00 2001
From: Andrew Dolgov <noreply@fakecake.org>
Date: Sat, 20 Nov 2021 16:11:44 +0300
Subject: [PATCH]  * sql_bool_to_bool: make parameter nullable  * errorhandler:
 don't try to truncate null strings  * UrlHelper::rewrite_relative: fix
 undefined offset warnings for URLs that lack schema/host (data: etc)

---
 classes/urlhelper.php    | 4 ++--
 include/errorhandler.php | 2 +-
 include/functions.php    | 7 ++++++-
 3 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/classes/urlhelper.php b/classes/urlhelper.php
index 91e1d4822..9bb4da962 100644
--- a/classes/urlhelper.php
+++ b/classes/urlhelper.php
@@ -89,8 +89,8 @@ class UrlHelper {
 		} else {
 			$base_parts = parse_url($base_url);
 
-			$rel_parts['host'] = $base_parts['host'];
-			$rel_parts['scheme'] = $base_parts['scheme'];
+			$rel_parts['host'] = $base_parts['host'] ?? "";
+			$rel_parts['scheme'] = $base_parts['scheme'] ?? "";
 
 			if (isset($rel_parts['path'])) {
 
diff --git a/include/errorhandler.php b/include/errorhandler.php
index 09d6bd7bc..ff2af8cd0 100644
--- a/include/errorhandler.php
+++ b/include/errorhandler.php
@@ -19,7 +19,7 @@ function format_backtrace($trace): string {
 							array_push($fmt_args, "[" . truncate_string(json_encode($a), 256, "...")) . "]";
 						} else if (is_resource($a)) {
 							array_push($fmt_args, truncate_string(get_resource_type($a), 256, "..."));
-						} else {
+						} else if ($a) {
 							array_push($fmt_args, truncate_string($a, 256, "..."));
 						}
 					}
diff --git a/include/functions.php b/include/functions.php
index af4819f00..14de32e95 100644
--- a/include/functions.php
+++ b/include/functions.php
@@ -341,7 +341,12 @@
 		}
 	}
 
-	function sql_bool_to_bool(string $s): bool {
+	/** Convert values accepted by tt-rss as true/false to PHP booleans
+	 * @see https://tt-rss.org/wiki/ApiReference#boolean-values
+	 * @param null|string $s null values are considered false
+	 * @return bool
+	 */
+	function sql_bool_to_bool(?string $s): bool {
 		return $s && ($s !== "f" && $s !== "false"); //no-op for PDO, backwards compat for legacy layer
 	}
 
-- 
GitLab