From 7248cab71b69efe1e5efa3f1400d4d3970271a77 Mon Sep 17 00:00:00 2001 From: m-holger Date: Tue, 2 Aug 2022 13:12:17 +0100 Subject: Add class QPDF_Unresolved Allow QPDFObjectHandle::obj to be set prior resolving object. ot_unresolved has been appended to the list object types in order to preserve the output of existing test cases. --- include/qpdf/Constants.h | 2 ++ include/qpdf/QPDFObject.hh | 1 + libqpdf/CMakeLists.txt | 1 + libqpdf/QPDF_Unresolved.cc | 41 +++++++++++++++++++++++++++++++++++++++++ libqpdf/qpdf/QPDF_Unresolved.hh | 21 +++++++++++++++++++++ 5 files changed, 66 insertions(+) create mode 100644 libqpdf/QPDF_Unresolved.cc create mode 100644 libqpdf/qpdf/QPDF_Unresolved.hh diff --git a/include/qpdf/Constants.h b/include/qpdf/Constants.h index 5d2113bd..cf6bdaef 100644 --- a/include/qpdf/Constants.h +++ b/include/qpdf/Constants.h @@ -82,6 +82,8 @@ enum qpdf_object_type_e { /* Additional object types that can occur in content streams */ ot_operator, ot_inlineimage, + /* Object types internal to qpdf */ + ot_unresolved, /* NOTE: if adding to this list, update QPDFObject.hh */ }; diff --git a/include/qpdf/QPDFObject.hh b/include/qpdf/QPDFObject.hh index eb7c4b90..8b6f7403 100644 --- a/include/qpdf/QPDFObject.hh +++ b/include/qpdf/QPDFObject.hh @@ -61,6 +61,7 @@ class QPDFObject static constexpr object_type_e ot_stream = ::ot_stream; static constexpr object_type_e ot_operator = ::ot_operator; static constexpr object_type_e ot_inlineimage = ::ot_inlineimage; + static constexpr object_type_e ot_unresolved = ::ot_unresolved; virtual ~QPDFObject() = default; virtual std::shared_ptr shallowCopy() = 0; diff --git a/libqpdf/CMakeLists.txt b/libqpdf/CMakeLists.txt index 51f7476d..7a4ef333 100644 --- a/libqpdf/CMakeLists.txt +++ b/libqpdf/CMakeLists.txt @@ -99,6 +99,7 @@ set(libqpdf_SOURCES QPDF_Reserved.cc QPDF_Stream.cc QPDF_String.cc + QPDF_Unresolved.cc QPDF_encryption.cc QPDF_json.cc QPDF_linearization.cc diff --git a/libqpdf/QPDF_Unresolved.cc b/libqpdf/QPDF_Unresolved.cc new file mode 100644 index 00000000..f348ec36 --- /dev/null +++ b/libqpdf/QPDF_Unresolved.cc @@ -0,0 +1,41 @@ +#include + +#include + +std::shared_ptr +QPDF_Unresolved::create() +{ + return do_create(new QPDF_Unresolved()); +} + +std::shared_ptr +QPDF_Unresolved::shallowCopy() +{ + return create(); +} + +std::string +QPDF_Unresolved::unparse() +{ + throw std::logic_error( + "attempted to unparse an unresolveded QPDFObjectHandle"); + return ""; +} + +JSON +QPDF_Unresolved::getJSON(int json_version) +{ + return JSON::makeNull(); +} + +QPDFObject::object_type_e +QPDF_Unresolved::getTypeCode() const +{ + return QPDFObject::ot_unresolved; +} + +char const* +QPDF_Unresolved::getTypeName() const +{ + return "unresolved"; +} diff --git a/libqpdf/qpdf/QPDF_Unresolved.hh b/libqpdf/qpdf/QPDF_Unresolved.hh new file mode 100644 index 00000000..4f1c5238 --- /dev/null +++ b/libqpdf/qpdf/QPDF_Unresolved.hh @@ -0,0 +1,21 @@ +#ifndef QPDF_UNRESOLVED_HH +#define QPDF_UNRESOLVED_HH + +#include + +class QPDF_Unresolved: public QPDFObject +{ + public: + virtual ~QPDF_Unresolved() = default; + static std::shared_ptr create(); + virtual std::shared_ptr shallowCopy(); + virtual std::string unparse(); + virtual JSON getJSON(int json_version); + virtual QPDFObject::object_type_e getTypeCode() const; + virtual char const* getTypeName() const; + + private: + QPDF_Unresolved() = default; +}; + +#endif // QPDF_UNRESOLVED_HH -- cgit v1.2.3-54-g00ecf