Skip to content

Commit 2f285ae

Browse files
Merge pull request #47697 from nextcloud/backport/47627/stable28
[stable28] [LinkReferenceProvider] Better size check
2 parents f4848d7 + d942fbd commit 2f285ae

1 file changed

Lines changed: 14 additions & 4 deletions

File tree

lib/private/Collaboration/Reference/LinkReferenceProvider.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ private function fetchReference(Reference $reference): void {
105105
}
106106
$linkContentLength = $headResponse->getHeader('Content-Length');
107107
if (is_numeric($linkContentLength) && (int) $linkContentLength > 5 * 1024 * 1024) {
108-
$this->logger->debug('Skip resolving links pointing to content length > 5 MB');
108+
$this->logger->debug('[Head] Skip resolving links pointing to content length > 5 MiB');
109109
return;
110110
}
111111
$linkContentType = $headResponse->getHeader('Content-Type');
@@ -118,18 +118,28 @@ private function fetchReference(Reference $reference): void {
118118
return;
119119
}
120120
try {
121-
$response = $client->get($reference->getId(), [ 'timeout' => 10 ]);
121+
$response = $client->get($reference->getId(), [ 'timeout' => 10, 'stream' => true ]);
122122
} catch (\Exception $e) {
123123
$this->logger->debug('Failed to fetch link for obtaining open graph data', ['exception' => $e]);
124124
return;
125125
}
126126

127-
$responseBody = (string)$response->getBody();
127+
$body = $response->getBody();
128+
if (is_resource($body)) {
129+
$responseContent = fread($body, 5 * 1024 * 1024);
130+
if (!feof($body)) {
131+
$this->logger->debug('[Get] Skip resolving links pointing to content length > 5 MiB');
132+
return;
133+
}
134+
} else {
135+
$this->logger->error('[Get] Impossible to check content length');
136+
return;
137+
}
128138

129139
// OpenGraph handling
130140
$consumer = new Consumer();
131141
$consumer->useFallbackMode = true;
132-
$object = $consumer->loadHtml($responseBody);
142+
$object = $consumer->loadHtml($responseContent);
133143

134144
$reference->setUrl($reference->getId());
135145

0 commit comments

Comments
 (0)