mirror of
https://github.com/qpdf/qpdf.git
synced 2024-12-23 03:18:59 +00:00
Remove unneeded owning_qpdf from QPDFValue
The qpdf member was already sufficient. Removing this actually fixed a few pre-existing issues around detecting foreign ownership and allowing certain conditions to be warnings rather than exceptions.
This commit is contained in:
parent
0132261ee0
commit
4422588d7d
@ -18,7 +18,7 @@ QPDF_Unresolved::shallowCopy()
|
|||||||
{
|
{
|
||||||
throw std::logic_error(
|
throw std::logic_error(
|
||||||
"attempted to shallow copy unresolved QPDFObjectHandle");
|
"attempted to shallow copy unresolved QPDFObjectHandle");
|
||||||
return create(qpdf, og);
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string
|
std::string
|
||||||
|
@ -24,22 +24,22 @@ class QPDFValue
|
|||||||
virtual std::string unparse() = 0;
|
virtual std::string unparse() = 0;
|
||||||
virtual JSON getJSON(int json_version) = 0;
|
virtual JSON getJSON(int json_version) = 0;
|
||||||
virtual void
|
virtual void
|
||||||
setDescription(QPDF* qpdf, std::string const& description)
|
setDescription(QPDF* qpdf_p, std::string const& description)
|
||||||
{
|
{
|
||||||
owning_qpdf = qpdf;
|
qpdf = qpdf_p;
|
||||||
object_description = description;
|
object_description = description;
|
||||||
}
|
}
|
||||||
bool
|
bool
|
||||||
getDescription(QPDF*& qpdf, std::string& description)
|
getDescription(QPDF*& qpdf_p, std::string& description)
|
||||||
{
|
{
|
||||||
qpdf = owning_qpdf;
|
qpdf_p = qpdf;
|
||||||
description = object_description;
|
description = object_description;
|
||||||
return owning_qpdf != nullptr;
|
return qpdf != nullptr;
|
||||||
}
|
}
|
||||||
bool
|
bool
|
||||||
hasDescription()
|
hasDescription()
|
||||||
{
|
{
|
||||||
return owning_qpdf != nullptr;
|
return qpdf != nullptr && !object_description.empty();
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
setParsedOffset(qpdf_offset_t offset)
|
setParsedOffset(qpdf_offset_t offset)
|
||||||
@ -92,7 +92,6 @@ class QPDFValue
|
|||||||
private:
|
private:
|
||||||
QPDFValue(QPDFValue const&) = delete;
|
QPDFValue(QPDFValue const&) = delete;
|
||||||
QPDFValue& operator=(QPDFValue const&) = delete;
|
QPDFValue& operator=(QPDFValue const&) = delete;
|
||||||
QPDF* owning_qpdf{nullptr};
|
|
||||||
std::string object_description;
|
std::string object_description;
|
||||||
qpdf_offset_t parsed_offset{-1};
|
qpdf_offset_t parsed_offset{-1};
|
||||||
const qpdf_object_type_e type_code;
|
const qpdf_object_type_e type_code;
|
||||||
|
@ -49,7 +49,7 @@ class QPDFValueProxy
|
|||||||
{
|
{
|
||||||
return value->type_name;
|
return value->type_name;
|
||||||
}
|
}
|
||||||
// Returns nullptr for direct objects
|
|
||||||
QPDF*
|
QPDF*
|
||||||
getQPDF() const
|
getQPDF() const
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
WARNING: split-tokens.pdf, object 3 0 at offset 181: Unable to parse content stream: page object 3 0 stream 5 0, stream 7 0, stream 9 0, stream 11 0 (content, offset 375): null character not allowed in name token; not attempting to remove unreferenced objects from this object
|
WARNING: page object 3 0 stream 5 0, stream 7 0, stream 9 0, stream 11 0 (content, offset 375): null character not allowed in name token
|
||||||
|
WARNING: split-tokens.pdf, object 3 0 at offset 181: Bad token found while scanning content stream; not attempting to remove unreferenced objects from this object
|
||||||
WARNING: empty PDF: content normalization encountered bad tokens
|
WARNING: empty PDF: content normalization encountered bad tokens
|
||||||
WARNING: empty PDF: normalized content ended with a bad token; you may be able to resolve this by coalescing content streams in combination with normalizing content. From the command line, specify --coalesce-contents
|
WARNING: empty PDF: normalized content ended with a bad token; you may be able to resolve this by coalescing content streams in combination with normalizing content. From the command line, specify --coalesce-contents
|
||||||
WARNING: empty PDF: Resulting stream data may be corrupted but is may still useful for manual inspection. For more information on this warning, search for content normalization in the manual.
|
WARNING: empty PDF: Resulting stream data may be corrupted but is may still useful for manual inspection. For more information on this warning, search for content normalization in the manual.
|
||||||
|
@ -1137,8 +1137,16 @@ test_29(QPDF& pdf, char const* arg2)
|
|||||||
assert(arg2 != 0);
|
assert(arg2 != 0);
|
||||||
QPDF other;
|
QPDF other;
|
||||||
other.processFile(arg2);
|
other.processFile(arg2);
|
||||||
// Should use copyForeignObject instead
|
// We need to create a QPDF with mixed ownership to exercise
|
||||||
other.getTrailer().replaceKey("/QTest", pdf.getTrailer().getKey("/QTest"));
|
// QPDFWriter's ownership check. To do this, we have to sneak the
|
||||||
|
// foreign object inside an ownerless direct object to avoid
|
||||||
|
// detection prior to calling QPDFWriter. Maybe a future version
|
||||||
|
// of qpdf will be able prevent creating mixed ownership. Another
|
||||||
|
// way to fake it out would be to call setDescription to
|
||||||
|
// explicitly change the ownership to the wrong value.
|
||||||
|
auto dict = QPDFObjectHandle::newDictionary();
|
||||||
|
dict.replaceKey("/QTest", pdf.getTrailer().getKey("/QTest"));
|
||||||
|
other.getTrailer().replaceKey("/QTest", dict);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
QPDFWriter w(other, "a.pdf");
|
QPDFWriter w(other, "a.pdf");
|
||||||
|
Loading…
Reference in New Issue
Block a user