Commit 2ff84aa2c95eba295e374f239b47e314d59e59cb
Committed by
Jay Berkenbilt
1 parent
3fc7c99d
Include detailed OpenSSL error messages
Fixes qpdf/qpdf#450
Showing
1 changed file
with
11 additions
and
1 deletions
libqpdf/QPDFCrypto_openssl.cc
| @@ -2,6 +2,9 @@ | @@ -2,6 +2,9 @@ | ||
| 2 | 2 | ||
| 3 | #include <cstring> | 3 | #include <cstring> |
| 4 | #include <stdexcept> | 4 | #include <stdexcept> |
| 5 | +#include <string> | ||
| 6 | + | ||
| 7 | +#include <openssl/err.h> | ||
| 5 | 8 | ||
| 6 | #include <qpdf/QIntC.hh> | 9 | #include <qpdf/QIntC.hh> |
| 7 | 10 | ||
| @@ -18,8 +21,15 @@ check_openssl(int status) | @@ -18,8 +21,15 @@ check_openssl(int status) | ||
| 18 | { | 21 | { |
| 19 | if (status != 1) | 22 | if (status != 1) |
| 20 | { | 23 | { |
| 21 | - throw std::runtime_error("openssl error"); | 24 | + // OpenSSL creates a "queue" of errors; copy the first (innermost) |
| 25 | + // error to the exception message. | ||
| 26 | + char buf[256] = ""; | ||
| 27 | + ERR_error_string_n(ERR_get_error(), buf, sizeof(buf)); | ||
| 28 | + std::string what = "OpenSSL error: "; | ||
| 29 | + what += buf; | ||
| 30 | + throw std::runtime_error(what); | ||
| 22 | } | 31 | } |
| 32 | + ERR_clear_error(); | ||
| 23 | } | 33 | } |
| 24 | 34 | ||
| 25 | QPDFCrypto_openssl::QPDFCrypto_openssl() : | 35 | QPDFCrypto_openssl::QPDFCrypto_openssl() : |