From c8e120123671bfe25fb508508f796714e2b42622 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Fri, 16 Dec 2022 06:03:09 +0100 Subject: [PATCH] LanguageClient: Do not send out invalid errors An error is expected to contain an error message so add one that misses one. Additionally assert when trying to set an error to a response that is invalid (does not contain message or code.) Fixes: QTCREATORBUG-28598 Fixes: QTCREATORBUG-27856 Change-Id: I0631433d847610531758d297a93a5c7cdfdc6c1d Reviewed-by: Christian Stenger --- src/libs/languageserverprotocol/jsonrpcmessages.h | 5 ++++- src/plugins/languageclient/client.cpp | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/libs/languageserverprotocol/jsonrpcmessages.h b/src/libs/languageserverprotocol/jsonrpcmessages.h index ebf51b4c14c..c33e46422ca 100644 --- a/src/libs/languageserverprotocol/jsonrpcmessages.h +++ b/src/libs/languageserverprotocol/jsonrpcmessages.h @@ -290,7 +290,10 @@ public: return val.isUndefined() ? std::nullopt : std::make_optional(fromJsonValue(val)); } void setError(const Error &error) - { m_jsonObject.insert(errorKey, QJsonValue(error)); } + { + QTC_CHECK(error.isValid()); + m_jsonObject.insert(errorKey, QJsonValue(error)); + } void clearError() { m_jsonObject.remove(errorKey); } bool isValid(QString *errorMessage) const override diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 5c99329675a..aca6ab50098 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -1891,6 +1891,7 @@ void ClientPrivate::handleMethod(const QString &method, const MessageId &id, con Response response(id); ResponseError error; error.setCode(ResponseError::MethodNotFound); + error.setMessage(QString("The client cannot handle the method '%1'.").arg(method)); response.setError(error); sendResponse(response); }