aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorAndy Scherzinger <info@andy-scherzinger.de>2024-09-04 11:45:04 +0200
committerGitHub <noreply@github.com>2024-09-04 11:45:04 +0200
commitd76b7633d748f7bb5eaa0163e080ec2e9d0066b6 (patch)
tree4d1f2dfa9353dfb1c73d983d28b3b09c1edb3491 /lib
parentcb3dfd69b64b81e639e307a5ecd7af048f1ef492 (diff)
parent98aaed8912517ce4fe45d02f58385bd6a6a6c033 (diff)
downloadnextcloud-server-d76b7633d748f7bb5eaa0163e080ec2e9d0066b6.tar.gz
nextcloud-server-d76b7633d748f7bb5eaa0163e080ec2e9d0066b6.zip
Merge pull request #47696 from nextcloud/backport/47627/stable29
[stable29] [LinkReferenceProvider] Better size check
Diffstat (limited to 'lib')
-rw-r--r--lib/public/Collaboration/Reference/LinkReferenceProvider.php20
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/public/Collaboration/Reference/LinkReferenceProvider.php b/lib/public/Collaboration/Reference/LinkReferenceProvider.php
index d41c1160c7c..3727be7de5b 100644
--- a/lib/public/Collaboration/Reference/LinkReferenceProvider.php
+++ b/lib/public/Collaboration/Reference/LinkReferenceProvider.php
@@ -131,8 +131,8 @@ class LinkReferenceProvider implements IReferenceProvider {
}
$linkContentLength = $headResponse->getHeader('Content-Length');
- if (is_numeric($linkContentLength) && (int) $linkContentLength > self::MAX_CONTENT_LENGTH) {
- $this->logger->debug('Skip resolving links pointing to content length > 5 MiB');
+ if (is_numeric($linkContentLength) && (int)$linkContentLength > self::MAX_CONTENT_LENGTH) {
+ $this->logger->debug('[Head] Skip resolving links pointing to content length > 5 MiB');
return;
}
@@ -146,18 +146,28 @@ class LinkReferenceProvider implements IReferenceProvider {
}
try {
- $response = $client->get($reference->getId(), [ 'timeout' => 10 ]);
+ $response = $client->get($reference->getId(), [ 'timeout' => 10, 'stream' => true ]);
} catch (\Exception $e) {
$this->logger->debug('Failed to fetch link for obtaining open graph data', ['exception' => $e]);
return;
}
- $responseBody = (string)$response->getBody();
+ $body = $response->getBody();
+ if (is_resource($body)) {
+ $responseContent = fread($body, self::MAX_CONTENT_LENGTH);
+ if (!feof($body)) {
+ $this->logger->debug('[Get] Skip resolving links pointing to content length > 5 MiB');
+ return;
+ }
+ } else {
+ $this->logger->error('[Get] Impossible to check content length');
+ return;
+ }
// OpenGraph handling
$consumer = new Consumer();
$consumer->useFallbackMode = true;
- $object = $consumer->loadHtml($responseBody);
+ $object = $consumer->loadHtml($responseContent);
$reference->setUrl($reference->getId());