From 3a840aa22d129561426b9dddda451248320f7bd7 Mon Sep 17 00:00:00 2001
From: Michael <heluecht@pirati.ca>
Date: Sun, 28 Aug 2022 19:27:21 +0000
Subject: [PATCH] Some more warnings and erors are fixed

---
 src/Model/GServer.php                        | 23 ++++++++++++++--
 src/Model/Item.php                           |  8 +++---
 src/Network/HTTPClient/Client/HttpClient.php |  3 +++
 src/Util/ParseUrl.php                        | 28 ++++++++++----------
 4 files changed, 43 insertions(+), 19 deletions(-)

diff --git a/src/Model/GServer.php b/src/Model/GServer.php
index 08cefba56..6192075f9 100644
--- a/src/Model/GServer.php
+++ b/src/Model/GServer.php
@@ -304,7 +304,7 @@ class GServer
 			Logger::info('Set failed status for existing server', ['url' => $url]);
 			return;
 		}
-		DBA::insert('gserver', ['url' => $url, 'nurl' => Strings::normaliseLink($url),
+		self::insert(['url' => $url, 'nurl' => Strings::normaliseLink($url),
 			'network' => Protocol::PHANTOM, 'created' => DateTimeFormat::utcNow(),
 			'failed' => true, 'last_failure' => DateTimeFormat::utcNow()]);
 		Logger::info('Set failed status for new server', ['url' => $url]);
@@ -583,7 +583,7 @@ class GServer
 		$gserver = DBA::selectFirst('gserver', ['network'], ['nurl' => Strings::normaliseLink($url)]);
 		if (!DBA::isResult($gserver)) {
 			$serverdata['created'] = DateTimeFormat::utcNow();
-			$ret = DBA::insert('gserver', $serverdata);
+			$ret = self::insert($serverdata);
 			$id = DBA::lastInsertId();
 		} else {
 			$ret = self::update($serverdata, ['nurl' => $serverdata['nurl']]);
@@ -2259,6 +2259,7 @@ class GServer
 	}
 
 	/**
+	 * Update rows in the gserver table.
 	 * Enforces gserver table field maximum sizes to avoid "Data too long" database errors
 	 *
 	 * @param array $fields
@@ -2274,4 +2275,22 @@ class GServer
 
 		return DBA::update('gserver', $fields, $condition);
 	}
+
+	/**
+	 * Insert a row into the gserver table.
+	 * Enforces gserver table field maximum sizes to avoid "Data too long" database errors
+	 *
+	 * @param array $fields
+	 * @param int   $duplicate_mode What to do on a duplicated entry
+	 *
+	 * @return bool
+	 *
+	 * @throws Exception
+	 */
+	public static function insert(array $fields, int $duplicate_mode = Database::INSERT_DEFAULT): bool
+	{
+		$fields = DI::dbaDefinition()->truncateFieldsForTable('gserver', $fields);
+
+		return DBA::insert('gserver', $fields, $duplicate_mode);
+	}
 }
diff --git a/src/Model/Item.php b/src/Model/Item.php
index 598fca840..eb150da45 100644
--- a/src/Model/Item.php
+++ b/src/Model/Item.php
@@ -2674,9 +2674,11 @@ class Item
 			'unseen'        => 1,
 		];
 
-		$signed = Diaspora::createLikeSignature($uid, $new_item);
-		if (!empty($signed)) {
-			$new_item['diaspora_signed_text'] = json_encode($signed);
+		if (in_array($activity, [Activity::LIKE, Activity::DISLIKE])) {
+			$signed = Diaspora::createLikeSignature($uid, $new_item);
+			if (!empty($signed)) {
+				$new_item['diaspora_signed_text'] = json_encode($signed);
+			}
 		}
 
 		self::insert($new_item, true);
diff --git a/src/Network/HTTPClient/Client/HttpClient.php b/src/Network/HTTPClient/Client/HttpClient.php
index a33d9749c..7974965ac 100644
--- a/src/Network/HTTPClient/Client/HttpClient.php
+++ b/src/Network/HTTPClient/Client/HttpClient.php
@@ -156,6 +156,8 @@ class HttpClient implements ICanSendHttpRequests
 			$conf[HttpClientOptions::HEADERS]['Accept'] = HttpClientAccept::DEFAULT;
 		}
 
+		$conf['sink'] = tempnam(System::getTempPath(), 'http-');
+
 		try {
 			$this->logger->debug('http request config.', ['url' => $url, 'method' => $method, 'options' => $conf]);
 
@@ -172,6 +174,7 @@ class HttpClient implements ICanSendHttpRequests
 			$this->logger->info('Invalid Argument for HTTP call.', ['url' => $url, 'method' => $method, 'exception' => $argumentException]);
 			return new CurlResult($url, '', ['http_code' => 500], $argumentException->getCode(), $argumentException->getMessage());
 		} finally {
+			unlink($conf['sink']);
 			$this->logger->debug('Request stop.', ['url' => $url, 'method' => $method]);
 			$this->profiler->stopRecording();
 		}
diff --git a/src/Util/ParseUrl.php b/src/Util/ParseUrl.php
index d0b168278..0b4bf9c95 100644
--- a/src/Util/ParseUrl.php
+++ b/src/Util/ParseUrl.php
@@ -287,22 +287,22 @@ class ParseUrl
 		// Expected form: Content-Type: text/html; charset=ISO-8859-4
 		if (preg_match('/charset=([a-z0-9-_.\/]+)/i', $curlResult->getContentType(), $matches)) {
 			$charset = trim(trim(trim(array_pop($matches)), ';,'));
+		} else {
+			// Then in body that gets precedence
+			// Expected forms:
+			// - <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+			// - <meta charset="utf-8">
+			// - <meta charset=utf-8>
+			// - <meta charSet="utf-8">
+			// We escape <style> and <script> tags since they can contain irrelevant charset information
+			// (see https://github.com/friendica/friendica/issues/9251#issuecomment-698636806)
+			Strings::performWithEscapedBlocks($body, '#<(?:style|script).*?</(?:style|script)>#ism', function ($body) use (&$charset) {
+				if (preg_match('/charset=["\']?([a-z0-9-_.\/]+)/i', $body, $matches)) {
+					$charset = trim(trim(trim(array_pop($matches)), ';,'));
+				}
+			});
 		}
 
-		// Then in body that gets precedence
-		// Expected forms:
-		// - <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-		// - <meta charset="utf-8">
-		// - <meta charset=utf-8>
-		// - <meta charSet="utf-8">
-		// We escape <style> and <script> tags since they can contain irrelevant charset information
-		// (see https://github.com/friendica/friendica/issues/9251#issuecomment-698636806)
-		Strings::performWithEscapedBlocks($body, '#<(?:style|script).*?</(?:style|script)>#ism', function ($body) use (&$charset) {
-			if (preg_match('/charset=["\']?([a-z0-9-_.\/]+)/i', $body, $matches)) {
-				$charset = trim(trim(trim(array_pop($matches)), ';,'));
-			}
-		});
-
 		$siteinfo['charset'] = $charset;
 
 		if ($charset && strtoupper($charset) != 'UTF-8') {