Skip to content

Fatal error when parsing directories whose names end in ".php" #306

Closed
@soren121

Description

@soren121

The language server seems to search for ".php" files in a way that can cause directories to be unintentionally parsed as files, which results in a fatal error.

For example, the Composer package mtdowling/jmespath.php installs to the folder "vendor/mtdowling/jmespath.php". The language server attempts to open the directory "jmespath.php" as a file using the function file_get_contents, which results in a permission denied error on my Windows 10 machine.

Environment

  • Windows 10, 64-bit, Anniversary Update (build 14393.693)
  • PHP 7.0.9, 64-bit VC14 NTS
  • Visual Studio Code v1.9.1
  • VS Code extension felixfbecker.php-intellisense v1.1.2

Steps to reproduce:

  • Install the Composer package mtdowling/jmespath.php to a directory.
  • Open the directory in VS Code and wait for the Intellisense extension to parse the directory.

Stack trace:

[Error - 11:07:38 AM] Error parsing file:///c:/Users/Nicholas/projects/demo/vendor/mtdowling/jmespath.php: ErrorException: file_get_contents(c:\Users\Nicholas\projects\demo\vendor\mtdowling\jmespath.php): failed to open stream: Permission denied in C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\felixfbecker\language-server\src\ContentRetriever\FileSystemContentRetriever.php:22
Stack trace:
#0 [internal function]: {closure}(2, 'file_get_conten...', 'C:\\Users\\Nichol...', 22, Array)
#1 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\felixfbecker\language-server\src\ContentRetriever\FileSystemContentRetriever.php(22): file_get_contents('c:\\Users\\Nichol...')
#2 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\felixfbecker\language-server\src\PhpDocumentLoader.php(103): LanguageServer\ContentRetriever\FileSystemContentRetriever->retrieve('file:///c:/User...')
#3 [internal function]: LanguageServer\PhpDocumentLoader->LanguageServer\{closure}()
#4 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\sabre\event\lib\coroutine.php(64): Generator->valid()
#5 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\sabre\event\lib\coroutine.php(118): Sabre\Event\{closure}()
#6 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\felixfbecker\language-server\src\PhpDocumentLoader.php(116): Sabre\Event\coroutine(Object(Closure))
#7 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\felixfbecker\language-server\src\Indexer.php(217): LanguageServer\PhpDocumentLoader->load('file:///c:/User...')
#8 [internal function]: LanguageServer\Indexer->LanguageServer\{closure}()
#9 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\sabre\event\lib\coroutine.php(70): Generator->send(NULL)
#10 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\sabre\event\lib\Promise.php(242): Sabre\Event\{closure}(NULL)
#11 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\sabre\event\lib\Loop\Loop.php(261): Sabre\Event\Promise->Sabre\Event\{closure}()
#12 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\sabre\event\lib\Loop\Loop.php(215): Sabre\Event\Loop\Loop->runNextTicks()
#13 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\sabre\event\lib\Loop\Loop.php(194): Sabre\Event\Loop\Loop->tick(true)
#14 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\sabre\event\lib\Loop\functions.php(122): Sabre\Event\Loop\Loop->run()
#15 C:\Users\Nicholas\.vscode\extensions\felixfbecker.php-intellisense-1.1.2\vendor\felixfbecker\language-server\bin\php-language-server.php(50): Sabre\Event\Loop\run()
#16 {main}

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions