From 36d56a4041aa03f38d621f771bc613c4ada58a88 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Roland=20H=C3=A4der?= <roland@mxchange.org>
Date: Fri, 17 Jun 2022 11:48:52 +0200
Subject: [PATCH] Continued: - changed back to 'return false;' as other methods
 heavily rely on false instead   of an empty array as pointed out by
 @heluecht@pirati.ca - $fetched_contact should be initialized as an empty
 array, let's not make this   code more crazier than it already is (see
 APContact::getByURL())

---
 src/Model/APContact.php    |  8 ++++----
 src/Module/DFRN/Notify.php | 11 ++++++-----
 src/Protocol/Diaspora.php  | 14 +++++++-------
 3 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/src/Model/APContact.php b/src/Model/APContact.php
index fba0c24f4c..2fff36ed49 100644
--- a/src/Model/APContact.php
+++ b/src/Model/APContact.php
@@ -124,7 +124,7 @@ class APContact
 			return [];
 		}
 
-		$fetched_contact = false;
+		$fetched_contact = [];
 
 		if (empty($update)) {
 			if (is_null($update)) {
@@ -206,7 +206,7 @@ class APContact
 
 			if ($failed) {
 				self::markForArchival($fetched_contact ?: []);
-				return $fetched_contact ?? [];
+				return $fetched_contact;
 			}
 		}
 
@@ -275,7 +275,7 @@ class APContact
 
 		// Quit if none of the basic values are set
 		if (empty($apcontact['url']) || empty($apcontact['type']) || (($apcontact['type'] != 'Tombstone') && empty($apcontact['inbox']))) {
-			return $fetched_contact ?? [];
+			return $fetched_contact;
 		} elseif ($apcontact['type'] == 'Tombstone') {
 			// The "inbox" field must have a content
 			$apcontact['inbox'] = '';
@@ -283,7 +283,7 @@ class APContact
 
 		// Quit if this doesn't seem to be an account at all
 		if (!in_array($apcontact['type'], ActivityPub::ACCOUNT_TYPES)) {
-			return $fetched_contact ?? [];
+			return $fetched_contact;
 		}
 
 		$parts = parse_url($apcontact['url']);
diff --git a/src/Module/DFRN/Notify.php b/src/Module/DFRN/Notify.php
index 09fe7ec144..259aa14587 100644
--- a/src/Module/DFRN/Notify.php
+++ b/src/Module/DFRN/Notify.php
@@ -59,12 +59,13 @@ class Notify extends BaseModule
 		}
 	}
 
-	private static function dispatchPublic($postdata)
+	private static function dispatchPublic(array $postdata)
 	{
 		$msg = Diaspora::decodeRaw($postdata, '', true);
-		if (!$msg) {
+		if (!is_array($msg)) {
 			// We have to fail silently to be able to hand it over to the salmon parser
-			return false;
+			Logger::warning('Diaspora::decodeRaw() has failed for some reason.');
+			return;
 		}
 
 		// Fetch the corresponding public contact
@@ -88,10 +89,10 @@ class Notify extends BaseModule
 		System::xmlExit($ret, 'Done');
 	}
 
-	private static function dispatchPrivate($user, $postdata)
+	private static function dispatchPrivate(array $user, array $postdata)
 	{
 		$msg = Diaspora::decodeRaw($postdata, $user['prvkey'] ?? '');
-		if (!$msg) {
+		if (!is_array($msg)) {
 			System::xmlExit(4, 'Unable to parse message');
 		}
 
diff --git a/src/Protocol/Diaspora.php b/src/Protocol/Diaspora.php
index 36f511a6ac..866f3c0163 100644
--- a/src/Protocol/Diaspora.php
+++ b/src/Protocol/Diaspora.php
@@ -203,20 +203,20 @@ class Diaspora
 	}
 
 	/**
-	 * Decodes incoming Diaspora message in the new format
+	 * Decodes incoming Diaspora message in the new format. This method returns false on an error.
 	 *
 	 * @param string  $raw      raw post message
 	 * @param string  $privKey   The private key of the importer
 	 * @param boolean $no_exit  Don't do an http exit on error
 	 *
-	 * @return array
+	 * @return bool|array
 	 * 'message' -> decoded Diaspora XML message
 	 * 'author' -> author diaspora handle
 	 * 'key' -> author public key (converted to pkcs#8)
 	 * @throws \Friendica\Network\HTTPException\InternalServerErrorException
 	 * @throws \ImagickException
 	 */
-	public static function decodeRaw(string $raw, string $privKey = '', bool $no_exit = false): array
+	public static function decodeRaw(string $raw, string $privKey = '', bool $no_exit = false)
 	{
 		$data = json_decode($raw);
 
@@ -232,7 +232,7 @@ class Diaspora
 			if (!is_object($j_outer_key_bundle)) {
 				Logger::notice('Outer Salmon did not verify. Discarding.');
 				if ($no_exit) {
-					return [];
+					return false;
 				} else {
 					throw new \Friendica\Network\HTTPException\BadRequestException();
 				}
@@ -251,7 +251,7 @@ class Diaspora
 		if (!is_object($basedom)) {
 			Logger::notice('Received data does not seem to be an XML. Discarding. '.$xml);
 			if ($no_exit) {
-				return [];
+				return false;
 			} else {
 				throw new \Friendica\Network\HTTPException\BadRequestException();
 			}
@@ -277,7 +277,7 @@ class Diaspora
 		if ($author_addr == '') {
 			Logger::notice('No author could be decoded. Discarding. Message: ' . $xml);
 			if ($no_exit) {
-				return [];
+				return false;
 			} else {
 				throw new \Friendica\Network\HTTPException\BadRequestException();
 			}
@@ -287,7 +287,7 @@ class Diaspora
 		if ($key == '') {
 			Logger::notice("Couldn't get a key for handle " . $author_addr . ". Discarding.");
 			if ($no_exit) {
-				return [];
+				return false;
 			} else {
 				throw new \Friendica\Network\HTTPException\BadRequestException();
 			}
-- 
2.39.5