From 83afa0c1b8f779d339d2034e4e6fdc154762fdb3 Mon Sep 17 00:00:00 2001 From: Kaloyan Raev Date: Mon, 24 Oct 2016 14:46:39 +0300 Subject: [PATCH] Handle closed input or output stream (#110) --- src/ProtocolStreamReader.php | 5 +++++ src/ProtocolStreamWriter.php | 12 +----------- 2 files changed, 6 insertions(+), 11 deletions(-) diff --git a/src/ProtocolStreamReader.php b/src/ProtocolStreamReader.php index 59af308..6551267 100644 --- a/src/ProtocolStreamReader.php +++ b/src/ProtocolStreamReader.php @@ -6,6 +6,7 @@ namespace LanguageServer; use LanguageServer\Protocol\Message; use AdvancedJsonRpc\Message as MessageBody; use Sabre\Event\Loop; +use RuntimeException; abstract class ParsingMode { @@ -29,6 +30,10 @@ class ProtocolStreamReader implements ProtocolReader { $this->input = $input; Loop\addReadStream($this->input, function() { + if (feof($this->input)) { + throw new RuntimeException('Stream is closed'); + } + while (($c = fgetc($this->input)) !== false && $c !== '') { $this->buffer .= $c; switch ($this->parsingMode) { diff --git a/src/ProtocolStreamWriter.php b/src/ProtocolStreamWriter.php index 2ac3579..cee9b60 100644 --- a/src/ProtocolStreamWriter.php +++ b/src/ProtocolStreamWriter.php @@ -4,7 +4,6 @@ declare(strict_types = 1); namespace LanguageServer; use LanguageServer\Protocol\Message; -use RuntimeException; class ProtocolStreamWriter implements ProtocolWriter { @@ -31,16 +30,7 @@ class ProtocolStreamWriter implements ProtocolWriter $totalBytesWritten = 0; while ($totalBytesWritten < $msgSize) { - error_clear_last(); - $bytesWritten = @fwrite($this->output, substr($data, $totalBytesWritten)); - if ($bytesWritten === false) { - $error = error_get_last(); - if ($error !== null) { - throw new RuntimeException('Could not write message: ' . error_get_last()['message']); - } else { - throw new RuntimeException('Could not write message'); - } - } + $bytesWritten = fwrite($this->output, substr($data, $totalBytesWritten)); $totalBytesWritten += $bytesWritten; } }