diff --git a/include/qpdf/Constants.h b/include/qpdf/Constants.h index d74cace3..c3c6fce2 100644 --- a/include/qpdf/Constants.h +++ b/include/qpdf/Constants.h @@ -17,7 +17,8 @@ enum qpdf_error_code_e { - qpdf_e_internal = 1, /* logic/programming error -- indicates bug */ + qpdf_e_success = 0, + qpdf_e_internal, /* logic/programming error -- indicates bug */ qpdf_e_system, /* I/O error, memory error, etc. */ qpdf_e_unsupported, /* PDF feature not (yet) supported by qpdf */ qpdf_e_password, /* incorrect password for encrypted file */ diff --git a/include/qpdf/qpdf-c.h b/include/qpdf/qpdf-c.h index 492a72ba..4b000a24 100644 --- a/include/qpdf/qpdf-c.h +++ b/include/qpdf/qpdf-c.h @@ -142,8 +142,7 @@ extern "C" { char const* qpdf_get_error_full_text(qpdf_data q, qpdf_error e); /* Use these functions to extract individual fields from the - * error; see QPDFExc.hh for details. It is invalid for e to be a - * null pointer for any of these calls. */ + * error; see QPDFExc.hh for details. */ QPDF_DLL enum qpdf_error_code_e qpdf_get_error_code(qpdf_data q, qpdf_error e); QPDF_DLL diff --git a/libqpdf/qpdf-c.cc b/libqpdf/qpdf-c.cc index d0d824b6..ffb8ad6f 100644 --- a/libqpdf/qpdf-c.cc +++ b/libqpdf/qpdf-c.cc @@ -166,26 +166,46 @@ qpdf_error qpdf_next_warning(qpdf_data qpdf) char const* qpdf_get_error_full_text(qpdf_data qpdf, qpdf_error e) { + if (e == 0) + { + return ""; + } return e->exc.getPointer()->what(); } enum qpdf_error_code_e qpdf_get_error_code(qpdf_data qpdf, qpdf_error e) { + if (e == 0) + { + return qpdf_e_success; + } return e->exc.getPointer()->getErrorCode(); } char const* qpdf_get_error_filename(qpdf_data qpdf, qpdf_error e) { + if (e == 0) + { + return ""; + } return e->exc.getPointer()->getFilename().c_str(); } unsigned long qpdf_get_error_file_position(qpdf_data qpdf, qpdf_error e) { + if (e == 0) + { + return 0; + } return e->exc.getPointer()->getFilePosition(); } char const* qpdf_get_error_message_detail(qpdf_data qpdf, qpdf_error e) { + if (e == 0) + { + return ""; + } return e->exc.getPointer()->getMessageDetail().c_str(); } diff --git a/qpdf/qpdf-ctest.c b/qpdf/qpdf-ctest.c index 08663cde..bdfca3c9 100644 --- a/qpdf/qpdf-ctest.c +++ b/qpdf/qpdf-ctest.c @@ -18,15 +18,24 @@ static void report_errors() printf(" pos : %ld\n", qpdf_get_error_file_position(qpdf, e)); printf(" text: %s\n", qpdf_get_error_message_detail(qpdf, e)); } + e = qpdf_get_error(qpdf); if (qpdf_has_error(qpdf)) { - e = qpdf_get_error(qpdf); printf("error: %s\n", qpdf_get_error_full_text(qpdf, e)); printf(" code: %d\n", qpdf_get_error_code(qpdf, e)); printf(" file: %s\n", qpdf_get_error_filename(qpdf, e)); printf(" pos : %ld\n", qpdf_get_error_file_position(qpdf, e)); printf(" text: %s\n", qpdf_get_error_message_detail(qpdf, e)); } + else + { + assert(e == 0); + assert(qpdf_get_error_code(qpdf, e) == qpdf_e_success); + (void)qpdf_get_error_full_text(qpdf, e); + (void)qpdf_get_error_filename(qpdf, e); + (void)qpdf_get_error_file_position(qpdf, e); + (void)qpdf_get_error_message_detail(qpdf, e); + } } static void test01(char const* infile,