From b210c37d57c09854a1b24395cd80cb9c5f5f5a78 Mon Sep 17 00:00:00 2001 From: Robert Lu Date: Tue, 21 May 2019 18:16:50 +0800 Subject: [PATCH] do not retrieve content if it's too large --- src/ContentRetriever/FileSystemContentRetriever.php | 10 +++++++++- src/PhpDocumentLoader.php | 6 ------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/ContentRetriever/FileSystemContentRetriever.php b/src/ContentRetriever/FileSystemContentRetriever.php index 82e7002..0ba21c2 100644 --- a/src/ContentRetriever/FileSystemContentRetriever.php +++ b/src/ContentRetriever/FileSystemContentRetriever.php @@ -3,6 +3,7 @@ declare(strict_types = 1); namespace LanguageServer\ContentRetriever; +use LanguageServer\ContentTooLargeException; use Sabre\Event\Promise; use function LanguageServer\uriToPath; @@ -19,6 +20,13 @@ class FileSystemContentRetriever implements ContentRetriever */ public function retrieve(string $uri): Promise { - return Promise\resolve(file_get_contents(uriToPath($uri))); + $limit = 150000; + + $path = uriToPath($uri); + $size = filesize($path); + if ($size > $limit) { + return Promise\reject(new ContentTooLargeException($uri, $size, $limit)); + } + return Promise\resolve(file_get_contents($path)); } } diff --git a/src/PhpDocumentLoader.php b/src/PhpDocumentLoader.php index 57a7e9c..5c1246d 100644 --- a/src/PhpDocumentLoader.php +++ b/src/PhpDocumentLoader.php @@ -105,13 +105,7 @@ class PhpDocumentLoader public function load(string $uri): Promise { return coroutine(function () use ($uri) { - - $limit = 150000; $content = yield $this->contentRetriever->retrieve($uri); - $size = strlen($content); - if ($size > $limit) { - throw new ContentTooLargeException($uri, $size, $limit); - } if (isset($this->documents[$uri])) { $document = $this->documents[$uri];