aboutsummaryrefslogtreecommitdiffstats
path: root/libqpdf/QPDFCrypto_openssl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libqpdf/QPDFCrypto_openssl.cc')
-rw-r--r--libqpdf/QPDFCrypto_openssl.cc12
1 files changed, 11 insertions, 1 deletions
diff --git a/libqpdf/QPDFCrypto_openssl.cc b/libqpdf/QPDFCrypto_openssl.cc
index b1866b5d..358040d5 100644
--- a/libqpdf/QPDFCrypto_openssl.cc
+++ b/libqpdf/QPDFCrypto_openssl.cc
@@ -2,6 +2,9 @@
#include <cstring>
#include <stdexcept>
+#include <string>
+
+#include <openssl/err.h>
#include <qpdf/QIntC.hh>
@@ -18,8 +21,15 @@ check_openssl(int status)
{
if (status != 1)
{
- throw std::runtime_error("openssl error");
+ // OpenSSL creates a "queue" of errors; copy the first (innermost)
+ // error to the exception message.
+ char buf[256] = "";
+ ERR_error_string_n(ERR_get_error(), buf, sizeof(buf));
+ std::string what = "OpenSSL error: ";
+ what += buf;
+ throw std::runtime_error(what);
}
+ ERR_clear_error();
}
QPDFCrypto_openssl::QPDFCrypto_openssl() :