Fix crash when an invalid URI is parsed and error handling is attempted
authorcrr0004 <crr0004@gmail.com>
Wed, 7 Apr 2021 10:31:41 +0000 (12:31 +0200)
committerKadir Cetinkaya <kadircet@google.com>
Wed, 7 Apr 2021 10:32:33 +0000 (12:32 +0200)
When you pass in a payload with an invalid URI in a build with assertions enabled, it will crash.
Consuming the error from the failed URI parse prevents the error.

The crash is caused by the [llvm::expected](https://llvm.org/doxygen/classllvm_1_1Expected.html) having protection around trying to deconstruct without consuming the error first.

Reviewed By: kadircet

Differential Revision: https://reviews.llvm.org/D99872

clang-tools-extra/clangd/Protocol.cpp

index 099c853..de2f34c 100644 (file)
@@ -70,6 +70,7 @@ bool fromJSON(const llvm::json::Value &E, URIForFile &R, llvm::json::Path P) {
   if (auto S = E.getAsString()) {
     auto Parsed = URI::parse(*S);
     if (!Parsed) {
+      consumeError(Parsed.takeError());
       P.report("failed to parse URI");
       return false;
     }