From db532eca8ebd64536985e7a40af22e803e3b3df9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ingo=20Kl=C3=B6cker?= Date: Mon, 4 Apr 2022 13:15:37 +0200 Subject: cpp: Return actual error if revocation fails * lang/cpp/src/editinteractor.cpp, lang/cpp/src/editinteractor.h (EditInteractor::parseStatusError): New. * lang/cpp/src/gpgrevokekeyeditinteractor.cpp (GpgRevokeKeyEditInteractor::Private::nextState): Handle status error. -- With this change the interactor returns a proper error like "Bad Passphrase" or "Empty Passphrase" instead of an unspecific "General Error" if a status error occurred. GnuPG-bug-id: 5904 --- lang/cpp/src/editinteractor.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'lang/cpp/src/editinteractor.cpp') diff --git a/lang/cpp/src/editinteractor.cpp b/lang/cpp/src/editinteractor.cpp index e411adac..753c2b09 100644 --- a/lang/cpp/src/editinteractor.cpp +++ b/lang/cpp/src/editinteractor.cpp @@ -29,6 +29,7 @@ #include "editinteractor.h" #include "callbacks.h" #include "error.h" +#include "util.h" #include @@ -256,6 +257,20 @@ void EditInteractor::setDebugChannel(std::FILE *debug) d->debug = debug; } +GpgME::Error EditInteractor::parseStatusError(const char *args) +{ + Error err; + + const auto fields = split(args, ' '); + if (fields.size() >= 2) { + err = Error{static_cast(std::stoul(fields[1]))}; + } else { + err = Error::fromCode(GPG_ERR_GENERAL); + } + + return err; +} + static const char *const status_strings[] = { "EOF", /* mkstatus processing starts here */ -- cgit v1.2.3