diff --git a/src/Model/GServer.php b/src/Model/GServer.php index 08cefba56c..6192075f96 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 598fca8407..eb150da454 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 a33d9749c5..7974965ac3 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 d0b1682785..0b4bf9c959 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: + // - + // - + // - + // - + // We escape