aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--examples/pdf-linearize.c9
-rw-r--r--include/qpdf/QPDF.hh4
-rw-r--r--include/qpdf/QPDFExc.hh6
-rw-r--r--include/qpdf/qpdf-c.h37
-rw-r--r--libqpdf/QPDF.cc10
-rw-r--r--libqpdf/QPDFExc.cc30
-rw-r--r--libqpdf/qpdf-c.cc182
-rw-r--r--qpdf/qpdf-ctest.c17
-rw-r--r--qpdf/qpdf.testcov1
-rw-r--r--qpdf/qtest/qpdf/append-page-content-damaged-c-check.out16
-rw-r--r--qpdf/qtest/qpdf/append-page-content-damaged-check.out2
-rw-r--r--qpdf/qtest/qpdf/append-page-content-damaged.out2
-rw-r--r--qpdf/qtest/qpdf/bad10-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad11-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad13-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad14-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad15-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad16-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad17-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad18-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad19-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad2-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad20-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad21-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad25-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad26-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad27-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad29-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad3-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad32-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad33-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad34-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad4-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad5-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad7-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad8-recover.out2
-rw-r--r--qpdf/qtest/qpdf/bad9-recover.out2
-rw-r--r--qpdf/qtest/qpdf/c-no-recovery.out4
-rw-r--r--qpdf/qtest/qpdf/c-read-errors.out4
-rw-r--r--qpdf/qtest/qpdf/c-read-warnings-and-errors.out18
-rw-r--r--qpdf/qtest/qpdf/c-write-errors.out4
-rw-r--r--qpdf/qtest/qpdf/c-write-warnings-and-errors.out18
-rw-r--r--qpdf/qtest/qpdf/heifer.out2
44 files changed, 302 insertions, 118 deletions
diff --git a/ChangeLog b/ChangeLog
index 0a7aab28..15c0bce4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2009-10-19 Jay Berkenbilt <jberkenb@argonst.com>
+ * include/qpdf/QPDF.hh (QPDF): getWarnings now returns a list of
+ QPDFExc rather than a list of strings. This way, warnings may be
+ inspected in more detail.
+
* Include information about the last object read in most error
messages. Most of the time, this will provide a good hint as to
which object contains the error, but it's possible that the last
diff --git a/examples/pdf-linearize.c b/examples/pdf-linearize.c
index ca49a4d9..d9da913e 100644
--- a/examples/pdf-linearize.c
+++ b/examples/pdf-linearize.c
@@ -24,6 +24,7 @@ int main(int argc, char* argv[])
int warnings = 0;
int errors = 0;
char* p = 0;
+ qpdf_error e = 0;
if ((p = strrchr(argv[0], '/')) != NULL)
{
@@ -53,12 +54,14 @@ int main(int argc, char* argv[])
while (qpdf_more_warnings(qpdf))
{
warnings = 1;
- printf("warning: %s\n", qpdf_next_warning(qpdf));
+ printf("warning: %s\n",
+ qpdf_get_error_full_text(qpdf, qpdf_next_warning(qpdf)));
}
- while (qpdf_more_errors(qpdf))
+ e = qpdf_get_error(qpdf);
+ if (e)
{
errors = 1;
- printf("error: %s\n", qpdf_next_error(qpdf));
+ printf("error: %s\n", qpdf_get_error_full_text(qpdf, e));
}
qpdf_cleanup(&qpdf);
if (errors)
diff --git a/include/qpdf/QPDF.hh b/include/qpdf/QPDF.hh
index 178d71c7..3f66a5f9 100644
--- a/include/qpdf/QPDF.hh
+++ b/include/qpdf/QPDF.hh
@@ -70,7 +70,7 @@ class DLL_EXPORT QPDF
// throws an exception. Note that if setSuppressWarnings was not
// called or was called with a false value, any warnings retrieved
// here will have already been issued to stderr.
- std::vector<std::string> getWarnings();
+ std::vector<QPDFExc> getWarnings();
std::string getFilename() const;
std::string getPDFVersion() const;
@@ -761,7 +761,7 @@ class DLL_EXPORT QPDF
std::map<ObjGen, ObjCache> obj_cache;
QPDFObjectHandle trailer;
std::vector<QPDFObjectHandle> all_pages;
- std::vector<std::string> warnings;
+ std::vector<QPDFExc> warnings;
// Linearization data
int first_xref_item_offset; // actual value from file
diff --git a/include/qpdf/QPDFExc.hh b/include/qpdf/QPDFExc.hh
index 6b9a11e4..7d6d8968 100644
--- a/include/qpdf/QPDFExc.hh
+++ b/include/qpdf/QPDFExc.hh
@@ -11,7 +11,7 @@
#include <qpdf/DLL.h>
#include <qpdf/Constants.h>
#include <stdexcept>
-#include <stddef.h>
+#include <fcntl.h>
class DLL_EXPORT QPDFExc: public std::runtime_error
{
@@ -36,8 +36,8 @@ class DLL_EXPORT QPDFExc: public std::runtime_error
qpdf_error_code_e getErrorCode() const;
std::string const& getFilename() const;
std::string const& getObject() const;
- off_t getOffset() const;
- std::string const& getMessage() const;
+ off_t getFilePosition() const;
+ std::string const& getMessageDetail() const;
private:
static std::string createWhat(std::string const& filename,
diff --git a/include/qpdf/qpdf-c.h b/include/qpdf/qpdf-c.h
index 90b3e5f9..ef4c4c6b 100644
--- a/include/qpdf/qpdf-c.h
+++ b/include/qpdf/qpdf-c.h
@@ -63,12 +63,14 @@
#include <qpdf/DLL.h>
#include <qpdf/Constants.h>
+#include <fcntl.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _qpdf_data* qpdf_data;
+ typedef struct _qpdf_error* qpdf_error;
/* Many functions return an integer error code. Codes are defined
* below. See comments at the top of the file for details. Note
@@ -97,21 +99,42 @@ extern "C" {
/* ERROR REPORTING */
- /* Returns 1 if there are any errors or warnings, and zero
- * otherwise.
+ /* Returns the error condition, if any. The return value is a
+ * pointer to data that will become invalid the next time an error
+ * occurs or after this function is called gain.
*/
DLL_EXPORT
- QPDF_BOOL qpdf_more_errors(qpdf_data qpdf);
+ qpdf_error qpdf_get_error(qpdf_data qpdf);
+
+ /* Returns 1 if there are any unretrieved warnings, and zero
+ * otherwise.
+ */
DLL_EXPORT
QPDF_BOOL qpdf_more_warnings(qpdf_data qpdf);
- /* If there are any errors/warnings, returns a pointer to the next
- * error or warning. Otherwise returns a null pointer.
+ /* If there are any warnings, returns a pointer to the next
+ * warning. Otherwise returns a null pointer.
*/
DLL_EXPORT
- char const* qpdf_next_error(qpdf_data qpdf);
+ qpdf_error qpdf_next_warning(qpdf_data qpdf);
+
+ /* Extract fields of the error. */
+
+ /* Use this function to get a full error message suitable for
+ * showing to the user. */
+ DLL_EXPORT
+ 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. */
+ DLL_EXPORT
+ enum qpdf_error_code_e qpdf_get_error_code(qpdf_data q, qpdf_error e);
+ DLL_EXPORT
+ char const* qpdf_get_error_filename(qpdf_data q, qpdf_error e);
+ DLL_EXPORT
+ off_t qpdf_get_error_file_position(qpdf_data q, qpdf_error e);
DLL_EXPORT
- char const* qpdf_next_warning(qpdf_data qpdf);
+ char const* qpdf_get_error_message_detail(qpdf_data q, qpdf_error e);
/* By default, warnings are written to stderr. Passing true to
* this function will prevent warnings from being written to
diff --git a/libqpdf/QPDF.cc b/libqpdf/QPDF.cc
index ebd78a9d..778091bd 100644
--- a/libqpdf/QPDF.cc
+++ b/libqpdf/QPDF.cc
@@ -300,10 +300,10 @@ QPDF::setAttemptRecovery(bool val)
this->attempt_recovery = val;
}
-std::vector<std::string>
+std::vector<QPDFExc>
QPDF::getWarnings()
{
- std::vector<std::string> result = this->warnings;
+ std::vector<QPDFExc> result = this->warnings;
this->warnings.clear();
return result;
}
@@ -397,10 +397,10 @@ QPDF::parse()
void
QPDF::warn(QPDFExc const& e)
{
- this->warnings.push_back(e.what());
+ this->warnings.push_back(e);
if (! this->suppress_warnings)
{
- std::cerr << "WARNING: " << this->warnings.back() << std::endl;
+ std::cerr << "WARNING: " << this->warnings.back().what() << std::endl;
}
}
@@ -424,7 +424,7 @@ QPDF::reconstruct_xref(QPDFExc& e)
warn(QPDFExc(qpdf_e_damaged_pdf, this->file.getName(), "", 0,
"file is damaged"));
warn(e);
- warn(QPDFExc(qpdf_e_damaged_pdf, "", "", 0,
+ warn(QPDFExc(qpdf_e_damaged_pdf, this->file.getName(), "", 0,
"Attempting to reconstruct cross-reference table"));
// Delete all references to type 1 (uncompressed) objects
diff --git a/libqpdf/QPDFExc.cc b/libqpdf/QPDFExc.cc
index 614990a9..1fc9d724 100644
--- a/libqpdf/QPDFExc.cc
+++ b/libqpdf/QPDFExc.cc
@@ -54,3 +54,33 @@ QPDFExc::createWhat(std::string const& filename,
result += message;
return result;
}
+
+qpdf_error_code_e
+QPDFExc::getErrorCode() const
+{
+ return this->error_code;
+}
+
+std::string const&
+QPDFExc::getFilename() const
+{
+ return this->filename;
+}
+
+std::string const&
+QPDFExc::getObject() const
+{
+ return this->object;
+}
+
+off_t
+QPDFExc::getFilePosition() const
+{
+ return this->offset;
+}
+
+std::string const&
+QPDFExc::getMessageDetail() const
+{
+ return this->message;
+}
diff --git a/libqpdf/qpdf-c.cc b/libqpdf/qpdf-c.cc
index f18080b2..2f65b0f7 100644
--- a/libqpdf/qpdf-c.cc
+++ b/libqpdf/qpdf-c.cc
@@ -3,11 +3,17 @@
#include <qpdf/QPDF.hh>
#include <qpdf/QPDFWriter.hh>
#include <qpdf/QTC.hh>
+#include <qpdf/QPDFExc.hh>
#include <list>
#include <string>
#include <stdexcept>
+struct _qpdf_error
+{
+ PointerHolder<QPDFExc> exc;
+};
+
struct _qpdf_data
{
_qpdf_data();
@@ -16,9 +22,22 @@ struct _qpdf_data
QPDF* qpdf;
QPDFWriter* qpdf_writer;
- std::string error;
- std::list<std::string> warnings;
+ PointerHolder<QPDFExc> error;
+ _qpdf_error tmp_error;
+ std::list<QPDFExc> warnings;
std::string tmp_string;
+
+ // Parameters for functions we call
+ char const* filename;
+ char const* password;
+
+ // must set filename and password
+ void call_read();
+
+ // must set filename
+ void call_init_write();
+
+ void call_write();
};
_qpdf_data::_qpdf_data() :
@@ -33,6 +52,65 @@ _qpdf_data::~_qpdf_data()
delete qpdf;
}
+void
+_qpdf_data::call_read()
+{
+ qpdf->processFile(filename, password);
+}
+
+void
+_qpdf_data::call_init_write()
+{
+ if (qpdf_writer)
+ {
+ QTC::TC("qpdf", "qpdf-c called qpdf_init_write multiple times");
+ delete qpdf_writer;
+ qpdf_writer = 0;
+ }
+ try
+ {
+ qpdf_writer = new QPDFWriter(*qpdf, filename);
+ }
+ catch (...)
+ {
+ throw;
+ }
+}
+
+void
+_qpdf_data::call_write()
+{
+ qpdf_writer->write();
+}
+
+static QPDF_ERROR_CODE trap_errors(qpdf_data qpdf, void (_qpdf_data::*fn)())
+{
+ QPDF_ERROR_CODE status = QPDF_SUCCESS;
+ try
+ {
+ (qpdf->*fn)();
+ }
+ catch (QPDFExc& e)
+ {
+ qpdf->error = new QPDFExc(e);
+ status |= QPDF_ERRORS;
+ }
+ catch (std::runtime_error& e)
+ {
+ qpdf->error = new QPDFExc(qpdf_e_system, "", "", 0, e.what());
+ }
+ catch (std::exception& e)
+ {
+ qpdf->error = new QPDFExc(qpdf_e_internal, "", "", 0, e.what());
+ }
+
+ if (qpdf_more_warnings(qpdf))
+ {
+ status |= QPDF_WARNINGS;
+ }
+ return status;
+}
+
qpdf_data qpdf_init()
{
QTC::TC("qpdf", "qpdf-c called qpdf_init");
@@ -48,19 +126,13 @@ void qpdf_cleanup(qpdf_data* qpdf)
*qpdf = 0;
}
-QPDF_BOOL qpdf_more_errors(qpdf_data qpdf)
-{
- QTC::TC("qpdf", "qpdf-c called qpdf_more_errors");
- return (qpdf->error.empty() ? QPDF_FALSE : QPDF_TRUE);
-}
-
QPDF_BOOL qpdf_more_warnings(qpdf_data qpdf)
{
QTC::TC("qpdf", "qpdf-c called qpdf_more_warnings");
if (qpdf->warnings.empty())
{
- std::vector<std::string> w = qpdf->qpdf->getWarnings();
+ std::vector<QPDFExc> w = qpdf->qpdf->getWarnings();
if (! w.empty())
{
qpdf->warnings.assign(w.begin(), w.end());
@@ -76,14 +148,14 @@ QPDF_BOOL qpdf_more_warnings(qpdf_data qpdf)
}
}
-char const* qpdf_next_error(qpdf_data qpdf)
+qpdf_error qpdf_get_error(qpdf_data qpdf)
{
- if (qpdf_more_errors(qpdf))
+ if (qpdf->error.getPointer())
{
- qpdf->tmp_string = qpdf->error;
- qpdf->error.clear();
+ qpdf->tmp_error.exc = qpdf->error;
+ qpdf->error = 0;
QTC::TC("qpdf", "qpdf-c qpdf_next_error returned error");
- return qpdf->tmp_string.c_str();
+ return &qpdf->tmp_error;
}
else
{
@@ -91,14 +163,14 @@ char const* qpdf_next_error(qpdf_data qpdf)
}
}
-char const* qpdf_next_warning(qpdf_data qpdf)
+qpdf_error qpdf_next_warning(qpdf_data qpdf)
{
if (qpdf_more_warnings(qpdf))
{
- qpdf->tmp_string = qpdf->warnings.front();
+ qpdf->tmp_error.exc = new QPDFExc(qpdf->warnings.front());
qpdf->warnings.pop_front();
QTC::TC("qpdf", "qpdf-c qpdf_next_warning returned warning");
- return qpdf->tmp_string.c_str();
+ return &qpdf->tmp_error;
}
else
{
@@ -106,6 +178,31 @@ char const* qpdf_next_warning(qpdf_data qpdf)
}
}
+char const* qpdf_get_error_full_text(qpdf_data qpdf, qpdf_error e)
+{
+ return e->exc.getPointer()->what();
+}
+
+enum qpdf_error_code_e qpdf_get_error_code(qpdf_data qpdf, qpdf_error e)
+{
+ return e->exc.getPointer()->getErrorCode();
+}
+
+char const* qpdf_get_error_filename(qpdf_data qpdf, qpdf_error e)
+{
+ return e->exc.getPointer()->getFilename().c_str();
+}
+
+off_t qpdf_get_error_file_position(qpdf_data qpdf, qpdf_error e)
+{
+ return e->exc.getPointer()->getFilePosition();
+}
+
+char const* qpdf_get_error_message_detail(qpdf_data qpdf, qpdf_error e)
+{
+ return e->exc.getPointer()->getMessageDetail().c_str();
+}
+
void qpdf_set_suppress_warnings(qpdf_data qpdf, QPDF_BOOL value)
{
QTC::TC("qpdf", "qpdf-c called qpdf_set_suppress_warnings");
@@ -128,19 +225,9 @@ QPDF_ERROR_CODE qpdf_read(qpdf_data qpdf, char const* filename,
char const* password)
{
QPDF_ERROR_CODE status = QPDF_SUCCESS;
- try
- {
- qpdf->qpdf->processFile(filename, password);
- }
- catch (std::exception& e)
- {
- qpdf->error = e.what();
- status |= QPDF_ERRORS;
- }
- if (qpdf_more_warnings(qpdf))
- {
- status |= QPDF_WARNINGS;
- }
+ qpdf->filename = filename;
+ qpdf->password = password;
+ status = trap_errors(qpdf, &_qpdf_data::call_read);
QTC::TC("qpdf", "qpdf-c called qpdf_read", status);
return status;
}
@@ -228,25 +315,8 @@ QPDF_BOOL qpdf_allow_modify_all(qpdf_data qpdf)
QPDF_ERROR_CODE qpdf_init_write(qpdf_data qpdf, char const* filename)
{
QPDF_ERROR_CODE status = QPDF_SUCCESS;
- if (qpdf->qpdf_writer)
- {
- QTC::TC("qpdf", "qpdf-c called qpdf_init_write multiple times");
- delete qpdf->qpdf_writer;
- qpdf->qpdf_writer = 0;
- }
- try
- {
- qpdf->qpdf_writer = new QPDFWriter(*(qpdf->qpdf), filename);
- }
- catch (std::exception& e)
- {
- qpdf->error = e.what();
- status |= QPDF_ERRORS;
- }
- if (qpdf_more_warnings(qpdf))
- {
- status |= QPDF_WARNINGS;
- }
+ qpdf->filename = filename;
+ status = trap_errors(qpdf, &_qpdf_data::call_init_write);
QTC::TC("qpdf", "qpdf-c called qpdf_init_write", status);
return status;
}
@@ -356,19 +426,7 @@ void qpdf_force_pdf_version(qpdf_data qpdf, char const* version)
QPDF_ERROR_CODE qpdf_write(qpdf_data qpdf)
{
QPDF_ERROR_CODE status = QPDF_SUCCESS;
- try
- {
- qpdf->qpdf_writer->write();
- }
- catch (std::exception& e)
- {
- qpdf->error = e.what();
- status |= QPDF_ERRORS;
- }
- if (qpdf_more_warnings(qpdf))
- {
- status |= QPDF_WARNINGS;
- }
+ status = trap_errors(qpdf, &_qpdf_data::call_write);
QTC::TC("qpdf", "qpdf-c called qpdf_write", status);
return status;
}
diff --git a/qpdf/qpdf-ctest.c b/qpdf/qpdf-ctest.c
index 3b62f5ee..422aff15 100644
--- a/qpdf/qpdf-ctest.c
+++ b/qpdf/qpdf-ctest.c
@@ -8,13 +8,24 @@ static qpdf_data qpdf = 0;
static void report_errors()
{
+ qpdf_error e = 0;
while (qpdf_more_warnings(qpdf))
{
- printf("warning: %s\n", qpdf_next_warning(qpdf));
+ e = qpdf_next_warning(qpdf);
+ printf("warning: %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));
}
- while (qpdf_more_errors(qpdf))
+ e = qpdf_get_error(qpdf);
+ if (e)
{
- printf("error: %s\n", qpdf_next_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));
}
}
diff --git a/qpdf/qpdf.testcov b/qpdf/qpdf.testcov
index ac715259..811bddff 100644
--- a/qpdf/qpdf.testcov
+++ b/qpdf/qpdf.testcov
@@ -120,7 +120,6 @@ QPDF decoding error warning 0
QPDF_Stream ignore non-dictionary DecodeParms 0
qpdf-c called qpdf_init 0
qpdf-c called qpdf_cleanup 0
-qpdf-c called qpdf_more_errors 0
qpdf-c called qpdf_more_warnings 0
qpdf-c qpdf_next_error returned error 0
qpdf-c qpdf_next_warning returned warning 0
diff --git a/qpdf/qtest/qpdf/append-page-content-damaged-c-check.out b/qpdf/qtest/qpdf/append-page-content-damaged-c-check.out
index f1ef65b1..ae557e52 100644
--- a/qpdf/qtest/qpdf/append-page-content-damaged-c-check.out
+++ b/qpdf/qtest/qpdf/append-page-content-damaged-c-check.out
@@ -1,9 +1,21 @@
WARNING: append-page-content-damaged.pdf: file is damaged
WARNING: append-page-content-damaged.pdf: can't find startxref
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: append-page-content-damaged.pdf: Attempting to reconstruct cross-reference table
version: 1.3
linearized: 0
encrypted: 0
warning: append-page-content-damaged.pdf: file is damaged
+ code: 5
+ file: append-page-content-damaged.pdf
+ pos : 0
+ text: file is damaged
warning: append-page-content-damaged.pdf: can't find startxref
-warning: Attempting to reconstruct cross-reference table
+ code: 5
+ file: append-page-content-damaged.pdf
+ pos : 0
+ text: can't find startxref
+warning: append-page-content-damaged.pdf: Attempting to reconstruct cross-reference table
+ code: 5
+ file: append-page-content-damaged.pdf
+ pos : 0
+ text: Attempting to reconstruct cross-reference table
diff --git a/qpdf/qtest/qpdf/append-page-content-damaged-check.out b/qpdf/qtest/qpdf/append-page-content-damaged-check.out
index 2b04bd9a..b529bc35 100644
--- a/qpdf/qtest/qpdf/append-page-content-damaged-check.out
+++ b/qpdf/qtest/qpdf/append-page-content-damaged-check.out
@@ -1,6 +1,6 @@
WARNING: append-page-content-damaged.pdf: file is damaged
WARNING: append-page-content-damaged.pdf: can't find startxref
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: append-page-content-damaged.pdf: Attempting to reconstruct cross-reference table
checking append-page-content-damaged.pdf
PDF Version: 1.3
File is not encrypted
diff --git a/qpdf/qtest/qpdf/append-page-content-damaged.out b/qpdf/qtest/qpdf/append-page-content-damaged.out
index 7835d627..bd4ecfab 100644
--- a/qpdf/qtest/qpdf/append-page-content-damaged.out
+++ b/qpdf/qtest/qpdf/append-page-content-damaged.out
@@ -1,4 +1,4 @@
WARNING: append-page-content-damaged.pdf: file is damaged
WARNING: append-page-content-damaged.pdf: can't find startxref
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: append-page-content-damaged.pdf: Attempting to reconstruct cross-reference table
qpdf: operation succeeded with warnings; resulting file may have some problems
diff --git a/qpdf/qtest/qpdf/bad10-recover.out b/qpdf/qtest/qpdf/bad10-recover.out
index ca726ca9..25de9bcc 100644
--- a/qpdf/qtest/qpdf/bad10-recover.out
+++ b/qpdf/qtest/qpdf/bad10-recover.out
@@ -1,6 +1,6 @@
WARNING: bad10.pdf: file is damaged
WARNING: bad10.pdf (trailer, file position 712): /Size key in trailer dictionary is not an integer
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad10.pdf: Attempting to reconstruct cross-reference table
/QTest is implicit
/QTest is direct
/QTest is null
diff --git a/qpdf/qtest/qpdf/bad11-recover.out b/qpdf/qtest/qpdf/bad11-recover.out
index f7825327..43bcd068 100644
--- a/qpdf/qtest/qpdf/bad11-recover.out
+++ b/qpdf/qtest/qpdf/bad11-recover.out
@@ -1,6 +1,6 @@
WARNING: bad11.pdf: file is damaged
WARNING: bad11.pdf (trailer, file position 905): /Prev key in trailer dictionary is not an integer
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad11.pdf: Attempting to reconstruct cross-reference table
/QTest is implicit
/QTest is direct
/QTest is null
diff --git a/qpdf/qtest/qpdf/bad13-recover.out b/qpdf/qtest/qpdf/bad13-recover.out
index 06f1a002..c20d98a7 100644
--- a/qpdf/qtest/qpdf/bad13-recover.out
+++ b/qpdf/qtest/qpdf/bad13-recover.out
@@ -1,4 +1,4 @@
WARNING: bad13.pdf: file is damaged
WARNING: bad13.pdf (trailer, file position 753): unexpected brace token
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad13.pdf: Attempting to reconstruct cross-reference table
bad13.pdf (trailer, file position 753): unexpected brace token
diff --git a/qpdf/qtest/qpdf/bad14-recover.out b/qpdf/qtest/qpdf/bad14-recover.out
index cd97fd5f..e66441a8 100644
--- a/qpdf/qtest/qpdf/bad14-recover.out
+++ b/qpdf/qtest/qpdf/bad14-recover.out
@@ -1,4 +1,4 @@
WARNING: bad14.pdf: file is damaged
WARNING: bad14.pdf (trailer, file position 753): unexpected brace token
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad14.pdf: Attempting to reconstruct cross-reference table
bad14.pdf (trailer, file position 753): unexpected brace token
diff --git a/qpdf/qtest/qpdf/bad15-recover.out b/qpdf/qtest/qpdf/bad15-recover.out
index 333717cd..0575a338 100644
--- a/qpdf/qtest/qpdf/bad15-recover.out
+++ b/qpdf/qtest/qpdf/bad15-recover.out
@@ -1,4 +1,4 @@
WARNING: bad15.pdf: file is damaged
WARNING: bad15.pdf (trailer, file position 753): unexpected array close token
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad15.pdf: Attempting to reconstruct cross-reference table
bad15.pdf (trailer, file position 753): unexpected array close token
diff --git a/qpdf/qtest/qpdf/bad16-recover.out b/qpdf/qtest/qpdf/bad16-recover.out
index 6c5f745c..1256ceab 100644
--- a/qpdf/qtest/qpdf/bad16-recover.out
+++ b/qpdf/qtest/qpdf/bad16-recover.out
@@ -1,4 +1,4 @@
WARNING: bad16.pdf: file is damaged
WARNING: bad16.pdf (trailer, file position 753): unexpected dictionary close token
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad16.pdf: Attempting to reconstruct cross-reference table
bad16.pdf (trailer, file position 753): unexpected dictionary close token
diff --git a/qpdf/qtest/qpdf/bad17-recover.out b/qpdf/qtest/qpdf/bad17-recover.out
index 60d28961..d09805ae 100644
--- a/qpdf/qtest/qpdf/bad17-recover.out
+++ b/qpdf/qtest/qpdf/bad17-recover.out
@@ -1,4 +1,4 @@
WARNING: bad17.pdf: file is damaged
WARNING: bad17.pdf (trailer, file position 753): dictionary ending here has an odd number of elements
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad17.pdf: Attempting to reconstruct cross-reference table
bad17.pdf (trailer, file position 753): dictionary ending here has an odd number of elements
diff --git a/qpdf/qtest/qpdf/bad18-recover.out b/qpdf/qtest/qpdf/bad18-recover.out
index b81c6d7a..b3128041 100644
--- a/qpdf/qtest/qpdf/bad18-recover.out
+++ b/qpdf/qtest/qpdf/bad18-recover.out
@@ -1,4 +1,4 @@
WARNING: bad18.pdf: file is damaged
WARNING: bad18.pdf (trailer, file position 753): unexpected )
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad18.pdf: Attempting to reconstruct cross-reference table
bad18.pdf (trailer, file position 753): unexpected )
diff --git a/qpdf/qtest/qpdf/bad19-recover.out b/qpdf/qtest/qpdf/bad19-recover.out
index 7e99befd..133dcb9a 100644
--- a/qpdf/qtest/qpdf/bad19-recover.out
+++ b/qpdf/qtest/qpdf/bad19-recover.out
@@ -1,4 +1,4 @@
WARNING: bad19.pdf: file is damaged
WARNING: bad19.pdf (trailer, file position 753): unexpected >
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad19.pdf: Attempting to reconstruct cross-reference table
bad19.pdf (trailer, file position 753): unexpected >
diff --git a/qpdf/qtest/qpdf/bad2-recover.out b/qpdf/qtest/qpdf/bad2-recover.out
index 277913ef..569ca19c 100644
--- a/qpdf/qtest/qpdf/bad2-recover.out
+++ b/qpdf/qtest/qpdf/bad2-recover.out
@@ -1,6 +1,6 @@
WARNING: bad2.pdf: file is damaged
WARNING: bad2.pdf: can't find startxref
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad2.pdf: Attempting to reconstruct cross-reference table
/QTest is implicit
/QTest is direct
/QTest is null
diff --git a/qpdf/qtest/qpdf/bad20-recover.out b/qpdf/qtest/qpdf/bad20-recover.out
index 2924a563..d9e35664 100644
--- a/qpdf/qtest/qpdf/bad20-recover.out
+++ b/qpdf/qtest/qpdf/bad20-recover.out
@@ -1,4 +1,4 @@
WARNING: bad20.pdf: file is damaged
WARNING: bad20.pdf (trailer, file position 753): invalid character (q) in hexstring
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad20.pdf: Attempting to reconstruct cross-reference table
bad20.pdf (trailer, file position 753): invalid character (q) in hexstring
diff --git a/qpdf/qtest/qpdf/bad21-recover.out b/qpdf/qtest/qpdf/bad21-recover.out
index b45319ee..73d2e895 100644
--- a/qpdf/qtest/qpdf/bad21-recover.out
+++ b/qpdf/qtest/qpdf/bad21-recover.out
@@ -1,4 +1,4 @@
WARNING: bad21.pdf: file is damaged
WARNING: bad21.pdf (trailer, file position 742): invalid name token
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad21.pdf: Attempting to reconstruct cross-reference table
bad21.pdf (trailer, file position 742): invalid name token
diff --git a/qpdf/qtest/qpdf/bad25-recover.out b/qpdf/qtest/qpdf/bad25-recover.out
index 9528a504..23893d5d 100644
--- a/qpdf/qtest/qpdf/bad25-recover.out
+++ b/qpdf/qtest/qpdf/bad25-recover.out
@@ -1,6 +1,6 @@
WARNING: bad25.pdf: file is damaged
WARNING: bad25.pdf (object 4 0, file position 307): expected n n obj
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad25.pdf: Attempting to reconstruct cross-reference table
WARNING: bad25.pdf: object 4 0 not found in file after regenerating cross reference table
/QTest is implicit
/QTest is indirect
diff --git a/qpdf/qtest/qpdf/bad26-recover.out b/qpdf/qtest/qpdf/bad26-recover.out
index b3da37ce..248aff7d 100644
--- a/qpdf/qtest/qpdf/bad26-recover.out
+++ b/qpdf/qtest/qpdf/bad26-recover.out
@@ -1,6 +1,6 @@
WARNING: bad26.pdf: file is damaged
WARNING: bad26.pdf (object 4 0, file position 307): expected n n obj
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad26.pdf: Attempting to reconstruct cross-reference table
WARNING: bad26.pdf: object 4 0 not found in file after regenerating cross reference table
/QTest is implicit
/QTest is indirect
diff --git a/qpdf/qtest/qpdf/bad27-recover.out b/qpdf/qtest/qpdf/bad27-recover.out
index 18a133d0..f06203b5 100644
--- a/qpdf/qtest/qpdf/bad27-recover.out
+++ b/qpdf/qtest/qpdf/bad27-recover.out
@@ -1,6 +1,6 @@
WARNING: bad27.pdf: file is damaged
WARNING: bad27.pdf (object 4 0, file position 307): expected n n obj
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad27.pdf: Attempting to reconstruct cross-reference table
WARNING: bad27.pdf: object 4 0 not found in file after regenerating cross reference table
/QTest is implicit
/QTest is indirect
diff --git a/qpdf/qtest/qpdf/bad29-recover.out b/qpdf/qtest/qpdf/bad29-recover.out
index a39e7eda..e027db9e 100644
--- a/qpdf/qtest/qpdf/bad29-recover.out
+++ b/qpdf/qtest/qpdf/bad29-recover.out
@@ -1,4 +1,4 @@
WARNING: bad29.pdf: file is damaged
WARNING: bad29.pdf (trailer, file position 742): null character not allowed in name token
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad29.pdf: Attempting to reconstruct cross-reference table
bad29.pdf (trailer, file position 742): null character not allowed in name token
diff --git a/qpdf/qtest/qpdf/bad3-recover.out b/qpdf/qtest/qpdf/bad3-recover.out
index 927c03bf..e282d665 100644
--- a/qpdf/qtest/qpdf/bad3-recover.out
+++ b/qpdf/qtest/qpdf/bad3-recover.out
@@ -1,6 +1,6 @@
WARNING: bad3.pdf: file is damaged
WARNING: bad3.pdf (file position 542): xref not found
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad3.pdf: Attempting to reconstruct cross-reference table
/QTest is implicit
/QTest is direct
/QTest is null
diff --git a/qpdf/qtest/qpdf/bad32-recover.out b/qpdf/qtest/qpdf/bad32-recover.out
index dd002f5e..c038a297 100644
--- a/qpdf/qtest/qpdf/bad32-recover.out
+++ b/qpdf/qtest/qpdf/bad32-recover.out
@@ -1,6 +1,6 @@
WARNING: bad32.pdf: file is damaged
WARNING: bad32.pdf (object 4 0, file position 307): expected 4 0 obj
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad32.pdf: Attempting to reconstruct cross-reference table
WARNING: bad32.pdf: object 4 0 not found in file after regenerating cross reference table
/QTest is implicit
/QTest is indirect
diff --git a/qpdf/qtest/qpdf/bad33-recover.out b/qpdf/qtest/qpdf/bad33-recover.out
index 9132c2a7..51dabe67 100644
--- a/qpdf/qtest/qpdf/bad33-recover.out
+++ b/qpdf/qtest/qpdf/bad33-recover.out
@@ -1,6 +1,6 @@
WARNING: bad33.pdf: file is damaged
WARNING: bad33.pdf (file position 1771): xref not found
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad33.pdf: Attempting to reconstruct cross-reference table
/QTest is indirect
/QTest is a stream. Dictionary: << /Filter (FlateDecode) /Length 123 >>
Raw stream data:
diff --git a/qpdf/qtest/qpdf/bad34-recover.out b/qpdf/qtest/qpdf/bad34-recover.out
index 071ebb91..08cc7bb1 100644
--- a/qpdf/qtest/qpdf/bad34-recover.out
+++ b/qpdf/qtest/qpdf/bad34-recover.out
@@ -1,6 +1,6 @@
WARNING: bad34.pdf: file is damaged
WARNING: bad34.pdf (object 4 0, file position 322): expected n n obj
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad34.pdf: Attempting to reconstruct cross-reference table
/QTest is indirect
/QTest is a stream. Dictionary: << /Length 44 /Quack 9 0 R >>
Raw stream data:
diff --git a/qpdf/qtest/qpdf/bad4-recover.out b/qpdf/qtest/qpdf/bad4-recover.out
index 12512e98..508acea5 100644
--- a/qpdf/qtest/qpdf/bad4-recover.out
+++ b/qpdf/qtest/qpdf/bad4-recover.out
@@ -1,6 +1,6 @@
WARNING: bad4.pdf: file is damaged
WARNING: bad4.pdf (xref table, file position 547): xref syntax invalid
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad4.pdf: Attempting to reconstruct cross-reference table
/QTest is implicit
/QTest is direct
/QTest is null
diff --git a/qpdf/qtest/qpdf/bad5-recover.out b/qpdf/qtest/qpdf/bad5-recover.out
index cdb207ee..75fe746e 100644
--- a/qpdf/qtest/qpdf/bad5-recover.out
+++ b/qpdf/qtest/qpdf/bad5-recover.out
@@ -1,6 +1,6 @@
WARNING: bad5.pdf: file is damaged
WARNING: bad5.pdf (xref table, file position 591): invalid xref entry (obj=2)
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad5.pdf: Attempting to reconstruct cross-reference table
/QTest is implicit
/QTest is direct
/QTest is null
diff --git a/qpdf/qtest/qpdf/bad7-recover.out b/qpdf/qtest/qpdf/bad7-recover.out
index 139835f8..fbf93ce5 100644
--- a/qpdf/qtest/qpdf/bad7-recover.out
+++ b/qpdf/qtest/qpdf/bad7-recover.out
@@ -1,4 +1,4 @@
WARNING: bad7.pdf: file is damaged
WARNING: bad7.pdf (file position 698): expected trailer dictionary
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad7.pdf: Attempting to reconstruct cross-reference table
bad7.pdf: unable to find trailer dictionary while recovering damaged file
diff --git a/qpdf/qtest/qpdf/bad8-recover.out b/qpdf/qtest/qpdf/bad8-recover.out
index 389b8304..f55a7948 100644
--- a/qpdf/qtest/qpdf/bad8-recover.out
+++ b/qpdf/qtest/qpdf/bad8-recover.out
@@ -1,6 +1,6 @@
WARNING: bad8.pdf: file is damaged
WARNING: bad8.pdf (file position 543): xref not found
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad8.pdf: Attempting to reconstruct cross-reference table
/QTest is implicit
/QTest is direct
/QTest is null
diff --git a/qpdf/qtest/qpdf/bad9-recover.out b/qpdf/qtest/qpdf/bad9-recover.out
index 4eb923f8..f795a156 100644
--- a/qpdf/qtest/qpdf/bad9-recover.out
+++ b/qpdf/qtest/qpdf/bad9-recover.out
@@ -1,6 +1,6 @@
WARNING: bad9.pdf: file is damaged
WARNING: bad9.pdf (trailer, file position 712): trailer dictionary lacks /Size key
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: bad9.pdf: Attempting to reconstruct cross-reference table
/QTest is implicit
/QTest is direct
/QTest is null
diff --git a/qpdf/qtest/qpdf/c-no-recovery.out b/qpdf/qtest/qpdf/c-no-recovery.out
index e6bc0956..2db03a71 100644
--- a/qpdf/qtest/qpdf/c-no-recovery.out
+++ b/qpdf/qtest/qpdf/c-no-recovery.out
@@ -1 +1,5 @@
error: bad33.pdf (file position 1771): xref not found
+ code: 5
+ file: bad33.pdf
+ pos : 1771
+ text: xref not found
diff --git a/qpdf/qtest/qpdf/c-read-errors.out b/qpdf/qtest/qpdf/c-read-errors.out
index 1d74816e..49594331 100644
--- a/qpdf/qtest/qpdf/c-read-errors.out
+++ b/qpdf/qtest/qpdf/c-read-errors.out
@@ -1 +1,5 @@
error: bad1.pdf: not a PDF file
+ code: 5
+ file: bad1.pdf
+ pos : 0
+ text: not a PDF file
diff --git a/qpdf/qtest/qpdf/c-read-warnings-and-errors.out b/qpdf/qtest/qpdf/c-read-warnings-and-errors.out
index 16674487..117663e9 100644
--- a/qpdf/qtest/qpdf/c-read-warnings-and-errors.out
+++ b/qpdf/qtest/qpdf/c-read-warnings-and-errors.out
@@ -1,4 +1,20 @@
warning: bad17.pdf: file is damaged
+ code: 5
+ file: bad17.pdf
+ pos : 0
+ text: file is damaged
warning: bad17.pdf (trailer, file position 753): dictionary ending here has an odd number of elements
-warning: Attempting to reconstruct cross-reference table
+ code: 5
+ file: bad17.pdf
+ pos : 753
+ text: dictionary ending here has an odd number of elements
+warning: bad17.pdf: Attempting to reconstruct cross-reference table
+ code: 5
+ file: bad17.pdf
+ pos : 0
+ text: Attempting to reconstruct cross-reference table
error: bad17.pdf (trailer, file position 753): dictionary ending here has an odd number of elements
+ code: 5
+ file: bad17.pdf
+ pos : 753
+ text: dictionary ending here has an odd number of elements
diff --git a/qpdf/qtest/qpdf/c-write-errors.out b/qpdf/qtest/qpdf/c-write-errors.out
index 031c6bf8..211cfdf9 100644
--- a/qpdf/qtest/qpdf/c-write-errors.out
+++ b/qpdf/qtest/qpdf/c-write-errors.out
@@ -1 +1,5 @@
error: bad30.pdf (file position 629): stream filter type is not name or array
+ code: 5
+ file: bad30.pdf
+ pos : 629
+ text: stream filter type is not name or array
diff --git a/qpdf/qtest/qpdf/c-write-warnings-and-errors.out b/qpdf/qtest/qpdf/c-write-warnings-and-errors.out
index e0833410..d486d599 100644
--- a/qpdf/qtest/qpdf/c-write-warnings-and-errors.out
+++ b/qpdf/qtest/qpdf/c-write-warnings-and-errors.out
@@ -1,4 +1,20 @@
warning: bad33.pdf: file is damaged
+ code: 5
+ file: bad33.pdf
+ pos : 0
+ text: file is damaged
warning: bad33.pdf (file position 1771): xref not found
-warning: Attempting to reconstruct cross-reference table
+ code: 5
+ file: bad33.pdf
+ pos : 1771
+ text: xref not found
+warning: bad33.pdf: Attempting to reconstruct cross-reference table
+ code: 5
+ file: bad33.pdf
+ pos : 0
+ text: Attempting to reconstruct cross-reference table
error: bad33.pdf (file position 629): stream filter type is not name or array
+ code: 5
+ file: bad33.pdf
+ pos : 629
+ text: stream filter type is not name or array
diff --git a/qpdf/qtest/qpdf/heifer.out b/qpdf/qtest/qpdf/heifer.out
index a3d365a2..ee550184 100644
--- a/qpdf/qtest/qpdf/heifer.out
+++ b/qpdf/qtest/qpdf/heifer.out
@@ -1,5 +1,5 @@
WARNING: heifer.pdf: file is damaged
WARNING: heifer.pdf (file position 92741): xref not found
-WARNING: Attempting to reconstruct cross-reference table
+WARNING: heifer.pdf: Attempting to reconstruct cross-reference table
WARNING: heifer.pdf (object 2 0, file position 51): attempting to recover stream length
qpdf: operation succeeded with warnings; resulting file may have some problems