Commit babd12c9b2b824416d2e5992d961396090e2bfea
1 parent
41b5c464
Add methods QPDF::anyWarnings and QPDF::closeInputSource
Showing
4 changed files
with
46 additions
and
1 deletions
ChangeLog
| 1 | 2019-08-31 Jay Berkenbilt <ejb@ql.org> | 1 | 2019-08-31 Jay Berkenbilt <ejb@ql.org> |
| 2 | 2 | ||
| 3 | + * Add QPDF::anyWarnings() method to find out whether there have | ||
| 4 | + been any warnings without resetting the list. | ||
| 5 | + | ||
| 6 | + * Add QPDF::closeInputSource() method to release the input source | ||
| 7 | + so the input file can be deleted or renamed. | ||
| 8 | + | ||
| 3 | * Add methods rename_file and remove_file to QUtil. | 9 | * Add methods rename_file and remove_file to QUtil. |
| 4 | 10 | ||
| 5 | 2019-08-24 Jay Berkenbilt <ejb@ql.org> | 11 | 2019-08-24 Jay Berkenbilt <ejb@ql.org> |
include/qpdf/QPDF.hh
| @@ -101,6 +101,14 @@ class QPDF | @@ -101,6 +101,14 @@ class QPDF | ||
| 101 | void processInputSource(PointerHolder<InputSource>, | 101 | void processInputSource(PointerHolder<InputSource>, |
| 102 | char const* password = 0); | 102 | char const* password = 0); |
| 103 | 103 | ||
| 104 | + // Close or otherwise release the input source. Once this has been | ||
| 105 | + // called, no other methods of qpdf can be called safely except | ||
| 106 | + // for getWarnings and anyWarnings(). After this has been called, | ||
| 107 | + // it is safe to perform operations on the input file such as | ||
| 108 | + // deleting or renaming it. | ||
| 109 | + QPDF_DLL | ||
| 110 | + void closeInputSource(); | ||
| 111 | + | ||
| 104 | // For certain forensic or investigatory purposes, it may | 112 | // For certain forensic or investigatory purposes, it may |
| 105 | // sometimes be useful to specify the encryption key directly, | 113 | // sometimes be useful to specify the encryption key directly, |
| 106 | // even though regular PDF applications do not provide a way to do | 114 | // even though regular PDF applications do not provide a way to do |
| @@ -206,6 +214,11 @@ class QPDF | @@ -206,6 +214,11 @@ class QPDF | ||
| 206 | QPDF_DLL | 214 | QPDF_DLL |
| 207 | std::vector<QPDFExc> getWarnings(); | 215 | std::vector<QPDFExc> getWarnings(); |
| 208 | 216 | ||
| 217 | + // Indicate whether any warnings have been issued so far. Does not | ||
| 218 | + // clear the list of warnings. | ||
| 219 | + QPDF_DLL | ||
| 220 | + bool anyWarnings() const; | ||
| 221 | + | ||
| 209 | // Return an application-scoped unique ID for this QPDF object. | 222 | // Return an application-scoped unique ID for this QPDF object. |
| 210 | // This is not a globally unique ID. It is constructing using a | 223 | // This is not a globally unique ID. It is constructing using a |
| 211 | // timestamp and a random number and is intended to be unique | 224 | // timestamp and a random number and is intended to be unique |
libqpdf/QPDF.cc
| @@ -240,6 +240,12 @@ QPDF::processInputSource(PointerHolder<InputSource> source, | @@ -240,6 +240,12 @@ QPDF::processInputSource(PointerHolder<InputSource> source, | ||
| 240 | } | 240 | } |
| 241 | 241 | ||
| 242 | void | 242 | void |
| 243 | +QPDF::closeInputSource() | ||
| 244 | +{ | ||
| 245 | + this->m->file = 0; | ||
| 246 | +} | ||
| 247 | + | ||
| 248 | +void | ||
| 243 | QPDF::setPasswordIsHexKey(bool val) | 249 | QPDF::setPasswordIsHexKey(bool val) |
| 244 | { | 250 | { |
| 245 | this->m->provided_password_is_hex_key = val; | 251 | this->m->provided_password_is_hex_key = val; |
| @@ -291,6 +297,12 @@ QPDF::getWarnings() | @@ -291,6 +297,12 @@ QPDF::getWarnings() | ||
| 291 | } | 297 | } |
| 292 | 298 | ||
| 293 | bool | 299 | bool |
| 300 | +QPDF::anyWarnings() const | ||
| 301 | +{ | ||
| 302 | + return ! this->m->warnings.empty(); | ||
| 303 | +} | ||
| 304 | + | ||
| 305 | +bool | ||
| 294 | QPDF::findHeader() | 306 | QPDF::findHeader() |
| 295 | { | 307 | { |
| 296 | qpdf_offset_t global_offset = this->m->file->tell(); | 308 | qpdf_offset_t global_offset = this->m->file->tell(); |
manual/qpdf-manual.xml
| @@ -4429,7 +4429,7 @@ print "\n"; | @@ -4429,7 +4429,7 @@ print "\n"; | ||
| 4429 | </listitem> | 4429 | </listitem> |
| 4430 | <listitem> | 4430 | <listitem> |
| 4431 | <para> | 4431 | <para> |
| 4432 | - the | 4432 | + The |
| 4433 | <option>--compression-level=<replaceable>level</replaceable></option> | 4433 | <option>--compression-level=<replaceable>level</replaceable></option> |
| 4434 | sets the zlib compression level used for any streams | 4434 | sets the zlib compression level used for any streams |
| 4435 | compressed by <literal>/FlateDecode</literal>. Most | 4435 | compressed by <literal>/FlateDecode</literal>. Most |
| @@ -4459,6 +4459,20 @@ print "\n"; | @@ -4459,6 +4459,20 @@ print "\n"; | ||
| 4459 | </listitem> | 4459 | </listitem> |
| 4460 | <listitem> | 4460 | <listitem> |
| 4461 | <para> | 4461 | <para> |
| 4462 | + Method <function>QPDF::anyWarnings</function> tells whether | ||
| 4463 | + there have been any warnings without clearing the list of | ||
| 4464 | + warnings. | ||
| 4465 | + </para> | ||
| 4466 | + </listitem> | ||
| 4467 | + <listitem> | ||
| 4468 | + <para> | ||
| 4469 | + Method <function>QPDF::closeInputSource</function> closes or | ||
| 4470 | + otherwise releases the input source. This enables the input | ||
| 4471 | + file to be deleted or renamed. | ||
| 4472 | + </para> | ||
| 4473 | + </listitem> | ||
| 4474 | + <listitem> | ||
| 4475 | + <para> | ||
| 4462 | New methods have been added to <classname>QUtil</classname> | 4476 | New methods have been added to <classname>QUtil</classname> |
| 4463 | for converting back and forth between strings and unsigned | 4477 | for converting back and forth between strings and unsigned |
| 4464 | integers: <function>uint_to_string</function>, | 4478 | integers: <function>uint_to_string</function>, |