summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/qpdf/Constants.h3
-rw-r--r--include/qpdf/qpdf-c.h3
-rw-r--r--libqpdf/qpdf-c.cc20
-rw-r--r--qpdf/qpdf-ctest.c11
4 files changed, 33 insertions, 4 deletions
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,