Commit d7b909f97d3effc9540c35b0251bdf1c9abf187c
1 parent
b45e3420
Normalize whitespace in ChangeLog
Showing
1 changed file
with
400 additions
and
400 deletions
ChangeLog
| @@ -189,569 +189,569 @@ | @@ -189,569 +189,569 @@ | ||
| 189 | 189 | ||
| 190 | 2023-10-15 Jay Berkenbilt <ejb@ql.org> | 190 | 2023-10-15 Jay Berkenbilt <ejb@ql.org> |
| 191 | 191 | ||
| 192 | - * 11.6.3: release | 192 | + * 11.6.3: release |
| 193 | 193 | ||
| 194 | 2023-10-14 Jay Berkenbilt <ejb@ql.org> | 194 | 2023-10-14 Jay Berkenbilt <ejb@ql.org> |
| 195 | 195 | ||
| 196 | - * Tweak linearization code to better handle files between 2 GB and | ||
| 197 | - 4 GB in size. Fixes #1023. | 196 | + * Tweak linearization code to better handle files between 2 GB and |
| 197 | + 4 GB in size. Fixes #1023. | ||
| 198 | 198 | ||
| 199 | - * Fix data loss bug: qpdf could discard a the character after an | ||
| 200 | - escaped octal string consisting of less than three digits. For | ||
| 201 | - content, this would only happen with QDF or when normalizing | ||
| 202 | - content. Outside of content, it could have happened in any binary | ||
| 203 | - string, such as /ID, if the encoding software used octal escape | ||
| 204 | - strings with less than three digits. This bug was introduced | ||
| 205 | - between 10.6.3 and 11.0.0. Fixes #1050. | 199 | + * Fix data loss bug: qpdf could discard a the character after an |
| 200 | + escaped octal string consisting of less than three digits. For | ||
| 201 | + content, this would only happen with QDF or when normalizing | ||
| 202 | + content. Outside of content, it could have happened in any binary | ||
| 203 | + string, such as /ID, if the encoding software used octal escape | ||
| 204 | + strings with less than three digits. This bug was introduced | ||
| 205 | + between 10.6.3 and 11.0.0. Fixes #1050. | ||
| 206 | 206 | ||
| 207 | 2023-10-07 Jay Berkenbilt <ejb@ql.org> | 207 | 2023-10-07 Jay Berkenbilt <ejb@ql.org> |
| 208 | 208 | ||
| 209 | - * 11.6.2: release | 209 | + * 11.6.2: release |
| 210 | 210 | ||
| 211 | - * Bug fix: when piping stream data, don't call finish on failure | ||
| 212 | - if the failure was caused by a previous call to finish. Fixes | ||
| 213 | - #1042. | 211 | + * Bug fix: when piping stream data, don't call finish on failure |
| 212 | + if the failure was caused by a previous call to finish. Fixes | ||
| 213 | + #1042. | ||
| 214 | 214 | ||
| 215 | - * Push .idea directory with the beginning of a sharable JetBrains | ||
| 216 | - CLion configuration. | 215 | + * Push .idea directory with the beginning of a sharable JetBrains |
| 216 | + CLion configuration. | ||
| 217 | 217 | ||
| 218 | 2023-09-05 Jay Berkenbilt <ejb@ql.org> | 218 | 2023-09-05 Jay Berkenbilt <ejb@ql.org> |
| 219 | 219 | ||
| 220 | - * 11.6.1: release | 220 | + * 11.6.1: release |
| 221 | 221 | ||
| 222 | - * Fix a logic error introduced in 11.6.0 in the fix to | ||
| 223 | - copyForeignObject. The bug could result in some pages not being | ||
| 224 | - copied. | 222 | + * Fix a logic error introduced in 11.6.0 in the fix to |
| 223 | + copyForeignObject. The bug could result in some pages not being | ||
| 224 | + copied. | ||
| 225 | 225 | ||
| 226 | 2023-09-03 Jay Berkenbilt <ejb@ql.org> | 226 | 2023-09-03 Jay Berkenbilt <ejb@ql.org> |
| 227 | 227 | ||
| 228 | - * 11.6.0: release | 228 | + * 11.6.0: release |
| 229 | 229 | ||
| 230 | - * ascii85 parser: ignore spaces everywhere including between ~ | ||
| 231 | - and >. Fixes #973. | 230 | + * ascii85 parser: ignore spaces everywhere including between ~ |
| 231 | + and >. Fixes #973. | ||
| 232 | 232 | ||
| 233 | - * Bug fix: with --pages, if one of the external files had warnings | ||
| 234 | - but the main file did not, the warning was previously not taken | ||
| 235 | - into consideration when determining the exit status. | 233 | + * Bug fix: with --pages, if one of the external files had warnings |
| 234 | + but the main file did not, the warning was previously not taken | ||
| 235 | + into consideration when determining the exit status. | ||
| 236 | 236 | ||
| 237 | - * Put quotation marks around the command in completion output to | ||
| 238 | - better handle spaces in paths. It is not a perfect fix (ideally, | ||
| 239 | - full shell-compatible quoting should be used), but it handles more | ||
| 240 | - cases than the old code and should handle all reasonable cases of | ||
| 241 | - qpdf being in a directory with a space in its name, which is | ||
| 242 | - common in Windows. Fixes #1021. | 237 | + * Put quotation marks around the command in completion output to |
| 238 | + better handle spaces in paths. It is not a perfect fix (ideally, | ||
| 239 | + full shell-compatible quoting should be used), but it handles more | ||
| 240 | + cases than the old code and should handle all reasonable cases of | ||
| 241 | + qpdf being in a directory with a space in its name, which is | ||
| 242 | + common in Windows. Fixes #1021. | ||
| 243 | 243 | ||
| 244 | - * Move check for random number device to runtime instead of | ||
| 245 | - compile time. Since, by default, the crypto provider provides | ||
| 246 | - random numbers, runtime determination of a random number device is | ||
| 247 | - usually not needed. Fixes #1022. | 244 | + * Move check for random number device to runtime instead of |
| 245 | + compile time. Since, by default, the crypto provider provides | ||
| 246 | + random numbers, runtime determination of a random number device is | ||
| 247 | + usually not needed. Fixes #1022. | ||
| 248 | 248 | ||
| 249 | 2023-09-02 Jay Berkenbilt <ejb@ql.org> | 249 | 2023-09-02 Jay Berkenbilt <ejb@ql.org> |
| 250 | 250 | ||
| 251 | - * Maintain links to foreign pages when copying foreign objects. | ||
| 252 | - This allows hyperlinks in imported files to work. Fixes #1003. | 251 | + * Maintain links to foreign pages when copying foreign objects. |
| 252 | + This allows hyperlinks in imported files to work. Fixes #1003. | ||
| 253 | 253 | ||
| 254 | - * Bug fix: Return a null object if an attempt is made to to copy a | ||
| 255 | - foreign /Pages object with copyForeignObject. This corrects a | ||
| 256 | - possible crash. Fixes #1010. | 254 | + * Bug fix: Return a null object if an attempt is made to to copy a |
| 255 | + foreign /Pages object with copyForeignObject. This corrects a | ||
| 256 | + possible crash. Fixes #1010. | ||
| 257 | 257 | ||
| 258 | - * Bug fix: Return a null object if an attempt is made to to copy a | ||
| 259 | - foreign /Pages object with copyForeignObject. Fixes #1003. | 258 | + * Bug fix: Return a null object if an attempt is made to to copy a |
| 259 | + foreign /Pages object with copyForeignObject. Fixes #1003. | ||
| 260 | 260 | ||
| 261 | - * Add /MediaBox to a page if absent. Thanks M. Holger. | 261 | + * Add /MediaBox to a page if absent. Thanks M. Holger. |
| 262 | 262 | ||
| 263 | - * Use std::vector internally for Pl_Buffer to | ||
| 264 | - avoid incompatibility with C++20. Thanks to Zoe Clifford. Fixes #1024. | 263 | + * Use std::vector internally for Pl_Buffer to |
| 264 | + avoid incompatibility with C++20. Thanks to Zoe Clifford. Fixes #1024. | ||
| 265 | 265 | ||
| 266 | 2023-07-09 Jay Berkenbilt <ejb@ql.org> | 266 | 2023-07-09 Jay Berkenbilt <ejb@ql.org> |
| 267 | 267 | ||
| 268 | - * 11.5.0: release | 268 | + * 11.5.0: release |
| 269 | 269 | ||
| 270 | - * This release consists entirely of changes made by M. Holger. | ||
| 271 | - Mostly this is changes to the private API, performance | ||
| 272 | - enhancements, code cleanup, and reformatting to 100 columns | ||
| 273 | - instead of 80. For qpdf development, we are starting to use | ||
| 274 | - JetBrains CLion, so a lot of the changes are moving us toward a | ||
| 275 | - cleaner development experience in that environment. | 270 | + * This release consists entirely of changes made by M. Holger. |
| 271 | + Mostly this is changes to the private API, performance | ||
| 272 | + enhancements, code cleanup, and reformatting to 100 columns | ||
| 273 | + instead of 80. For qpdf development, we are starting to use | ||
| 274 | + JetBrains CLion, so a lot of the changes are moving us toward a | ||
| 275 | + cleaner development experience in that environment. | ||
| 276 | 276 | ||
| 277 | 2023-06-15 Jay Berkenbilt <ejb@ql.org> | 277 | 2023-06-15 Jay Berkenbilt <ejb@ql.org> |
| 278 | 278 | ||
| 279 | - * Bug fix: when a the same page is copied multiple times, copy | ||
| 280 | - the annotations rather than having multiple pages share an | ||
| 281 | - annotation object. Thanks to M. Holger for the fix. Fixes #600. | 279 | + * Bug fix: when a the same page is copied multiple times, copy |
| 280 | + the annotations rather than having multiple pages share an | ||
| 281 | + annotation object. Thanks to M. Holger for the fix. Fixes #600. | ||
| 282 | 282 | ||
| 283 | 2023-06-14 Jay Berkenbilt <ejb@ql.org> | 283 | 2023-06-14 Jay Berkenbilt <ejb@ql.org> |
| 284 | 284 | ||
| 285 | - * Add "FUTURE" build option for enabling experimental APIs. Do not | ||
| 286 | - package qpdf built with the FUTURE option as there are no binary | ||
| 287 | - compatibility or even source compatibility guarantees. The option | ||
| 288 | - is intended for developers who want to ensure that future | ||
| 289 | - potentially breaking changes are compatible with their code or | ||
| 290 | - provide feedback on upcoming changes. At present, the only feature | ||
| 291 | - enabled by FUTURE is a move constructor for QPDFObjectHandle. | ||
| 292 | - While this shouldn't break any code, it would change details about | ||
| 293 | - how many copies of a specific QPDFObjectHandle were in existence, | ||
| 294 | - so it could potentially break code that was relying on internal | ||
| 295 | - shared pointer reference counts. Thanks to M. Holger for the idea | ||
| 296 | - and contribution. | 285 | + * Add "FUTURE" build option for enabling experimental APIs. Do not |
| 286 | + package qpdf built with the FUTURE option as there are no binary | ||
| 287 | + compatibility or even source compatibility guarantees. The option | ||
| 288 | + is intended for developers who want to ensure that future | ||
| 289 | + potentially breaking changes are compatible with their code or | ||
| 290 | + provide feedback on upcoming changes. At present, the only feature | ||
| 291 | + enabled by FUTURE is a move constructor for QPDFObjectHandle. | ||
| 292 | + While this shouldn't break any code, it would change details about | ||
| 293 | + how many copies of a specific QPDFObjectHandle were in existence, | ||
| 294 | + so it could potentially break code that was relying on internal | ||
| 295 | + shared pointer reference counts. Thanks to M. Holger for the idea | ||
| 296 | + and contribution. | ||
| 297 | 297 | ||
| 298 | 2023-05-25 Jay Berkenbilt <ejb@ql.org> | 298 | 2023-05-25 Jay Berkenbilt <ejb@ql.org> |
| 299 | 299 | ||
| 300 | - * Add new method Buffer::copy and deprecate Buffer copy | ||
| 301 | - constructor and assignment operator. Buffer copy operations are | ||
| 302 | - expensive as they always involve copying the buffer content. Use | ||
| 303 | - "buffer2 = buffer1.copy();" or "Buffer buffer2{buffer1.copy()};" | ||
| 304 | - to make it explicit that copying is intended. This change was | ||
| 305 | - contributed by M. Holger. | 300 | + * Add new method Buffer::copy and deprecate Buffer copy |
| 301 | + constructor and assignment operator. Buffer copy operations are | ||
| 302 | + expensive as they always involve copying the buffer content. Use | ||
| 303 | + "buffer2 = buffer1.copy();" or "Buffer buffer2{buffer1.copy()};" | ||
| 304 | + to make it explicit that copying is intended. This change was | ||
| 305 | + contributed by M. Holger. | ||
| 306 | 306 | ||
| 307 | 2023-05-21 Jay Berkenbilt <ejb@ql.org> | 307 | 2023-05-21 Jay Berkenbilt <ejb@ql.org> |
| 308 | 308 | ||
| 309 | - * 11.4.0: release | 309 | + * 11.4.0: release |
| 310 | 310 | ||
| 311 | 2023-05-20 Jay Berkenbilt <ejb@ql.org> | 311 | 2023-05-20 Jay Berkenbilt <ejb@ql.org> |
| 312 | 312 | ||
| 313 | - * From M. Holger: add QPDF::newReserved as a better alternative to | ||
| 314 | - QPDFObjectHandle::newReserved. The operation of creating a new | ||
| 315 | - reserved object fits better in the QPDF API. The old call just | ||
| 316 | - delegates to the new one. | 313 | + * From M. Holger: add QPDF::newReserved as a better alternative to |
| 314 | + QPDFObjectHandle::newReserved. The operation of creating a new | ||
| 315 | + reserved object fits better in the QPDF API. The old call just | ||
| 316 | + delegates to the new one. | ||
| 317 | 317 | ||
| 318 | 2023-05-13 Jay Berkenbilt <ejb@ql.org> | 318 | 2023-05-13 Jay Berkenbilt <ejb@ql.org> |
| 319 | 319 | ||
| 320 | - * When an annotation dictionary's appearance dictionary (`/AP`) | ||
| 321 | - has a key that is a stream, disregard `/AS` (which is supposed to | ||
| 322 | - point to a subkey). This enables qpdf to not ignore annotations | ||
| 323 | - that have incorrect values for `/AS` when the appearance stream is | ||
| 324 | - directly in the `/AP` dictionary instead of in a subkey. Fixes | ||
| 325 | - #949. | 320 | + * When an annotation dictionary's appearance dictionary (`/AP`) |
| 321 | + has a key that is a stream, disregard `/AS` (which is supposed to | ||
| 322 | + point to a subkey). This enables qpdf to not ignore annotations | ||
| 323 | + that have incorrect values for `/AS` when the appearance stream is | ||
| 324 | + directly in the `/AP` dictionary instead of in a subkey. Fixes | ||
| 325 | + #949. | ||
| 326 | 326 | ||
| 327 | 2023-04-02 Jay Berkenbilt <ejb@ql.org> | 327 | 2023-04-02 Jay Berkenbilt <ejb@ql.org> |
| 328 | - * Allow QPDFJob's workflow to be split into a reading phase and a | ||
| 329 | - writing phase to allow the caller to operate on the QPDF object | ||
| 330 | - before it is written. This adds methods QPDFJob::createQPDF and | ||
| 331 | - QPDFJob::writeQPDF and corresponding C API functions | ||
| 332 | - qpdfjob_create_qpdf and qpdfjob_write_qpdf. Thanks to M. Holger | ||
| 333 | - for the contribution. | 328 | + * Allow QPDFJob's workflow to be split into a reading phase and a |
| 329 | + writing phase to allow the caller to operate on the QPDF object | ||
| 330 | + before it is written. This adds methods QPDFJob::createQPDF and | ||
| 331 | + QPDFJob::writeQPDF and corresponding C API functions | ||
| 332 | + qpdfjob_create_qpdf and qpdfjob_write_qpdf. Thanks to M. Holger | ||
| 333 | + for the contribution. | ||
| 334 | 334 | ||
| 335 | 2023-04-01 Jay Berkenbilt <ejb@ql.org> | 335 | 2023-04-01 Jay Berkenbilt <ejb@ql.org> |
| 336 | - * From M. Holger: throw a logic error if an uninitialized or | ||
| 337 | - foreign QPDFObjectHandle is added to an array. | 336 | + * From M. Holger: throw a logic error if an uninitialized or |
| 337 | + foreign QPDFObjectHandle is added to an array. | ||
| 338 | 338 | ||
| 339 | 2023-03-18 Jay Berkenbilt <ejb@ql.org> | 339 | 2023-03-18 Jay Berkenbilt <ejb@ql.org> |
| 340 | 340 | ||
| 341 | - * Enhance --optimize-images to support images nested inside of | ||
| 342 | - form XObjects. Thanks to Connor Osborne (github user cdosborn) for | ||
| 343 | - the contribution. Fixes #923. | 341 | + * Enhance --optimize-images to support images nested inside of |
| 342 | + form XObjects. Thanks to Connor Osborne (github user cdosborn) for | ||
| 343 | + the contribution. Fixes #923. | ||
| 344 | 344 | ||
| 345 | 2023-02-25 Jay Berkenbilt <ejb@ql.org> | 345 | 2023-02-25 Jay Berkenbilt <ejb@ql.org> |
| 346 | 346 | ||
| 347 | - * 11.3.0: release | 347 | + * 11.3.0: release |
| 348 | 348 | ||
| 349 | - * When performing overlay or underlay operations, convert the | ||
| 350 | - original page to a form XObject instead of simply isolating its | ||
| 351 | - contents with q/Q operators. This prevents unbalanced q/Q | ||
| 352 | - operators in any of the original pages from messing up the | ||
| 353 | - graphics state of anything that is overlaid on top of it. Fixes | ||
| 354 | - #904. | 349 | + * When performing overlay or underlay operations, convert the |
| 350 | + original page to a form XObject instead of simply isolating its | ||
| 351 | + contents with q/Q operators. This prevents unbalanced q/Q | ||
| 352 | + operators in any of the original pages from messing up the | ||
| 353 | + graphics state of anything that is overlaid on top of it. Fixes | ||
| 354 | + #904. | ||
| 355 | 355 | ||
| 356 | 2023-02-18 Jay Berkenbilt <ejb@ql.org> | 356 | 2023-02-18 Jay Berkenbilt <ejb@ql.org> |
| 357 | 357 | ||
| 358 | - * Treat all linearization errors and warnings as warnings, and | ||
| 359 | - issue them through the normal warning system using the new error | ||
| 360 | - code qpdf_e_linearization. That means that --no-warn will suppress | ||
| 361 | - them, and the file name is included in the warning. Fixes #851. | 358 | + * Treat all linearization errors and warnings as warnings, and |
| 359 | + issue them through the normal warning system using the new error | ||
| 360 | + code qpdf_e_linearization. That means that --no-warn will suppress | ||
| 361 | + them, and the file name is included in the warning. Fixes #851. | ||
| 362 | 362 | ||
| 363 | 2023-01-28 Jay Berkenbilt <ejb@ql.org> | 363 | 2023-01-28 Jay Berkenbilt <ejb@ql.org> |
| 364 | 364 | ||
| 365 | - * New option --remove-restrictions removes security restrictions | ||
| 366 | - from digitally signed files. Fixes #833. | 365 | + * New option --remove-restrictions removes security restrictions |
| 366 | + from digitally signed files. Fixes #833. | ||
| 367 | 367 | ||
| 368 | 2023-01-09 Jay Berkenbilt <ejb@ql.org> | 368 | 2023-01-09 Jay Berkenbilt <ejb@ql.org> |
| 369 | 369 | ||
| 370 | - * Bug fix: flatten annotations should handle a page with no | ||
| 371 | - /Resources key. Fixes #827. | 370 | + * Bug fix: flatten annotations should handle a page with no |
| 371 | + /Resources key. Fixes #827. | ||
| 372 | 372 | ||
| 373 | 2022-11-20 Jay Berkenbilt <ejb@ql.org> | 373 | 2022-11-20 Jay Berkenbilt <ejb@ql.org> |
| 374 | 374 | ||
| 375 | - * 11.2.0: release | 375 | + * 11.2.0: release |
| 376 | 376 | ||
| 377 | - * Add a few convenience methods to QPDFTokenizer::Token for | ||
| 378 | - checking token types. thanks to M. Holger for the contribution. | 377 | + * Add a few convenience methods to QPDFTokenizer::Token for |
| 378 | + checking token types. thanks to M. Holger for the contribution. | ||
| 379 | 379 | ||
| 380 | - * Add stream creation methods to the QPDF class as a better | ||
| 381 | - alternative to the ones in the QPDFObjectHandle class. Thanks to | ||
| 382 | - M. Holger for the contribution. | 380 | + * Add stream creation methods to the QPDF class as a better |
| 381 | + alternative to the ones in the QPDFObjectHandle class. Thanks to | ||
| 382 | + M. Holger for the contribution. | ||
| 383 | 383 | ||
| 384 | 2022-11-19 Jay Berkenbilt <ejb@ql.org> | 384 | 2022-11-19 Jay Berkenbilt <ejb@ql.org> |
| 385 | 385 | ||
| 386 | - * Bug fix: handle special case of an earlier xref stream object's | ||
| 387 | - object number being reused by an update made by appending the | ||
| 388 | - file. Fixes #809. | 386 | + * Bug fix: handle special case of an earlier xref stream object's |
| 387 | + object number being reused by an update made by appending the | ||
| 388 | + file. Fixes #809. | ||
| 389 | 389 | ||
| 390 | 2022-10-08 Jay Berkenbilt <ejb@ql.org> | 390 | 2022-10-08 Jay Berkenbilt <ejb@ql.org> |
| 391 | 391 | ||
| 392 | - * Fix major performance bug with the openssl crypto provider when | ||
| 393 | - using OpenSSL 3. The legacy loader and rc4 algorithm was being | ||
| 394 | - loaded with every call to the crypto provider instead of once in | ||
| 395 | - the life of the program. Fixes #798. | 392 | + * Fix major performance bug with the openssl crypto provider when |
| 393 | + using OpenSSL 3. The legacy loader and rc4 algorithm was being | ||
| 394 | + loaded with every call to the crypto provider instead of once in | ||
| 395 | + the life of the program. Fixes #798. | ||
| 396 | 396 | ||
| 397 | - * performance_check: add --test option to limit which tests are | ||
| 398 | - run. | 397 | + * performance_check: add --test option to limit which tests are |
| 398 | + run. | ||
| 399 | 399 | ||
| 400 | 2022-10-06 Jay Berkenbilt <ejb@ql.org> | 400 | 2022-10-06 Jay Berkenbilt <ejb@ql.org> |
| 401 | 401 | ||
| 402 | - * Change minimum required C++ version from C++-14 to C++-17. | 402 | + * Change minimum required C++ version from C++-14 to C++-17. |
| 403 | 403 | ||
| 404 | - * Fix another symbol export issue with the MinGW build. | 404 | + * Fix another symbol export issue with the MinGW build. |
| 405 | 405 | ||
| 406 | 2022-10-01 Jay Berkenbilt <ejb@ql.org> | 406 | 2022-10-01 Jay Berkenbilt <ejb@ql.org> |
| 407 | 407 | ||
| 408 | - * 11.1.1: release | 408 | + * 11.1.1: release |
| 409 | 409 | ||
| 410 | 2022-09-27 Jay Berkenbilt <ejb@ql.org> | 410 | 2022-09-27 Jay Berkenbilt <ejb@ql.org> |
| 411 | 411 | ||
| 412 | - * Bug fix: avoid having the AppImage discard the first argument | ||
| 413 | - when renamed to one of the embedded executables. Fixes #789. | 412 | + * Bug fix: avoid having the AppImage discard the first argument |
| 413 | + when renamed to one of the embedded executables. Fixes #789. | ||
| 414 | 414 | ||
| 415 | - * Add AppImage-specific tests to CI. These test different | ||
| 416 | - invocation styles and loading of the proper shared library. | 415 | + * Add AppImage-specific tests to CI. These test different |
| 416 | + invocation styles and loading of the proper shared library. | ||
| 417 | 417 | ||
| 418 | 2022-09-26 Jay Berkenbilt <ejb@ql.org> | 418 | 2022-09-26 Jay Berkenbilt <ejb@ql.org> |
| 419 | 419 | ||
| 420 | - * Bug fix: avoid using PDF Doc encoding for strings whose PDF Doc | ||
| 421 | - encoding representation starts with UTF-16 or UTF-8 markers. Fixes | ||
| 422 | - #778. | 420 | + * Bug fix: avoid using PDF Doc encoding for strings whose PDF Doc |
| 421 | + encoding representation starts with UTF-16 or UTF-8 markers. Fixes | ||
| 422 | + #778. | ||
| 423 | 423 | ||
| 424 | 2022-09-27 Jay Berkenbilt <ejb@ql.org> | 424 | 2022-09-27 Jay Berkenbilt <ejb@ql.org> |
| 425 | 425 | ||
| 426 | - * Add tests to CI for char being unsigned by default. | 426 | + * Add tests to CI for char being unsigned by default. |
| 427 | 427 | ||
| 428 | 2022-09-14 Jay Berkenbilt <ejb@ql.org> | 428 | 2022-09-14 Jay Berkenbilt <ejb@ql.org> |
| 429 | 429 | ||
| 430 | - * 11.1.0: release | 430 | + * 11.1.0: release |
| 431 | 431 | ||
| 432 | - * Add notes to documentation clarifying that installing the dev | ||
| 433 | - component usually requires the lib component to also be installed. | 432 | + * Add notes to documentation clarifying that installing the dev |
| 433 | + component usually requires the lib component to also be installed. | ||
| 434 | 434 | ||
| 435 | - * Set CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON in cmake to | ||
| 436 | - (hopefully) solve the problem of older installed qpdf headers | ||
| 437 | - interfering with building qpdf from source. Fixes #763. | 435 | + * Set CMAKE_INCLUDE_DIRECTORIES_PROJECT_BEFORE ON in cmake to |
| 436 | + (hopefully) solve the problem of older installed qpdf headers | ||
| 437 | + interfering with building qpdf from source. Fixes #763. | ||
| 438 | 438 | ||
| 439 | 2022-09-12 Jay Berkenbilt <ejb@ql.org> | 439 | 2022-09-12 Jay Berkenbilt <ejb@ql.org> |
| 440 | 440 | ||
| 441 | - * Add some missing DLL exports that only affect the Windows build. | 441 | + * Add some missing DLL exports that only affect the Windows build. |
| 442 | 442 | ||
| 443 | - * Remove compile-time test for LL_FMT. It's unlikely that any | ||
| 444 | - compiler new enough to build qpdf still doesn't support %lld. | 443 | + * Remove compile-time test for LL_FMT. It's unlikely that any |
| 444 | + compiler new enough to build qpdf still doesn't support %lld. | ||
| 445 | 445 | ||
| 446 | 2022-09-10 Jay Berkenbilt <ejb@ql.org> | 446 | 2022-09-10 Jay Berkenbilt <ejb@ql.org> |
| 447 | 447 | ||
| 448 | - * 11.0.0: release | 448 | + * 11.0.0: release |
| 449 | 449 | ||
| 450 | 2022-09-09 Jay Berkenbilt <ejb@ql.org> | 450 | 2022-09-09 Jay Berkenbilt <ejb@ql.org> |
| 451 | 451 | ||
| 452 | - * Add QPDFObjectHandle::isSameObjectAs to test whether two | ||
| 453 | - QPDFObjectHandle objects point to the same underlying object. | 452 | + * Add QPDFObjectHandle::isSameObjectAs to test whether two |
| 453 | + QPDFObjectHandle objects point to the same underlying object. | ||
| 454 | 454 | ||
| 455 | - * Expose ability to create custom loggers and to get and set the | ||
| 456 | - logger for QPDF and QPDFJob through the C API. | 455 | + * Expose ability to create custom loggers and to get and set the |
| 456 | + logger for QPDF and QPDFJob through the C API. | ||
| 457 | 457 | ||
| 458 | 2022-09-08 Jay Berkenbilt <ejb@ql.org> | 458 | 2022-09-08 Jay Berkenbilt <ejb@ql.org> |
| 459 | 459 | ||
| 460 | - * Added new functions to the C API to support qpdf JSON: | ||
| 461 | - qpdf_create_from_json_file, qpdf_create_from_json_data, | ||
| 462 | - qpdf_update_from_json_file, qpdf_update_from_json_data, and | ||
| 463 | - qpdf_write_json. Examples can be found in qpdf-ctest.c (in the | ||
| 464 | - source tree), tests 42 through 47. | 460 | + * Added new functions to the C API to support qpdf JSON: |
| 461 | + qpdf_create_from_json_file, qpdf_create_from_json_data, | ||
| 462 | + qpdf_update_from_json_file, qpdf_update_from_json_data, and | ||
| 463 | + qpdf_write_json. Examples can be found in qpdf-ctest.c (in the | ||
| 464 | + source tree), tests 42 through 47. | ||
| 465 | 465 | ||
| 466 | - * Add QPDFObjectHandle::isDestroyed() to test whether an indirect | ||
| 467 | - object was from a QPDF that has been destroyed. | 466 | + * Add QPDFObjectHandle::isDestroyed() to test whether an indirect |
| 467 | + object was from a QPDF that has been destroyed. | ||
| 468 | 468 | ||
| 469 | 2022-09-07 Jay Berkenbilt <ejb@ql.org> | 469 | 2022-09-07 Jay Berkenbilt <ejb@ql.org> |
| 470 | 470 | ||
| 471 | - * Add QPDFObjectHandle::getQPDF(), which returns a reference, as | ||
| 472 | - an alternative to QPDFObjectHandle::getOwningQPDF(). | 471 | + * Add QPDFObjectHandle::getQPDF(), which returns a reference, as |
| 472 | + an alternative to QPDFObjectHandle::getOwningQPDF(). | ||
| 473 | 473 | ||
| 474 | 2022-09-06 Jay Berkenbilt <ejb@ql.org> | 474 | 2022-09-06 Jay Berkenbilt <ejb@ql.org> |
| 475 | 475 | ||
| 476 | - * For all bounding box methods in QPDFPageObjectHelper other than | ||
| 477 | - MediaBox, add a parameter `copy_if_fallback`, and add comments | ||
| 478 | - explaining in depth exactly what copy_if_shared and | ||
| 479 | - copy_if_fallback mean. Fixes #664. | 476 | + * For all bounding box methods in QPDFPageObjectHelper other than |
| 477 | + MediaBox, add a parameter `copy_if_fallback`, and add comments | ||
| 478 | + explaining in depth exactly what copy_if_shared and | ||
| 479 | + copy_if_fallback mean. Fixes #664. | ||
| 480 | 480 | ||
| 481 | - * Add new methods getArtBox and getBleedBox to | ||
| 482 | - QPDFPageObjectHelper, completing the set of bounding box methods. | 481 | + * Add new methods getArtBox and getBleedBox to |
| 482 | + QPDFPageObjectHelper, completing the set of bounding box methods. | ||
| 483 | 483 | ||
| 484 | - * The --show-encryption option now works even if a correct | ||
| 485 | - password is not supplied. If you were using --show-encryption to | ||
| 486 | - test whether you have the right password, use --requires-password | ||
| 487 | - instead. Fixes #598. | 484 | + * The --show-encryption option now works even if a correct |
| 485 | + password is not supplied. If you were using --show-encryption to | ||
| 486 | + test whether you have the right password, use --requires-password | ||
| 487 | + instead. Fixes #598. | ||
| 488 | 488 | ||
| 489 | 2022-09-05 Jay Berkenbilt <ejb@ql.org> | 489 | 2022-09-05 Jay Berkenbilt <ejb@ql.org> |
| 490 | 490 | ||
| 491 | - * Add a move constructor to Buffer, making it possible to move | ||
| 492 | - rather than copy the internal buffer. Thanks to jbarlow83 for the | ||
| 493 | - contribution. | 491 | + * Add a move constructor to Buffer, making it possible to move |
| 492 | + rather than copy the internal buffer. Thanks to jbarlow83 for the | ||
| 493 | + contribution. | ||
| 494 | 494 | ||
| 495 | 2022-09-02 Jay Berkenbilt <ejb@ql.org> | 495 | 2022-09-02 Jay Berkenbilt <ejb@ql.org> |
| 496 | 496 | ||
| 497 | - * Add new QPDF::create() factory method that returns | ||
| 498 | - std::shared_ptr<QPDF>. | 497 | + * Add new QPDF::create() factory method that returns |
| 498 | + std::shared_ptr<QPDF>. | ||
| 499 | 499 | ||
| 500 | - * Prevent copying/assigning to QPDF objects in the API. It has | ||
| 501 | - never been safe to do this, but the API wasn't preventing it. | 500 | + * Prevent copying/assigning to QPDF objects in the API. It has |
| 501 | + never been safe to do this, but the API wasn't preventing it. | ||
| 502 | 502 | ||
| 503 | 2022-09-01 Jay Berkenbilt <ejb@ql.org> | 503 | 2022-09-01 Jay Berkenbilt <ejb@ql.org> |
| 504 | 504 | ||
| 505 | - * Remove QPDFObject.hh from include/qpdf. The only reason to | ||
| 506 | - include was to get QPDFObject::object_type_e. Instead, include | ||
| 507 | - qpdf/Constants.h, and change `QPDFObject::ot_` to `::ot_`. | 505 | + * Remove QPDFObject.hh from include/qpdf. The only reason to |
| 506 | + include was to get QPDFObject::object_type_e. Instead, include | ||
| 507 | + qpdf/Constants.h, and change `QPDFObject::ot_` to `::ot_`. | ||
| 508 | 508 | ||
| 509 | - * More optimizations and cleanup from m-holger (#726, #730) | ||
| 510 | - including major refactor of QPDF's internal representations of | ||
| 511 | - objects. In addition to a large performance improvement, this also | ||
| 512 | - made it possible for QPDFObjectHandle::getOwningQPDF() to return a | ||
| 513 | - null pointer if the owning QPDF had been destroyed. (A more | ||
| 514 | - complete solution to this problem will be introduced for qpdf 12.) | ||
| 515 | - This work also paves the way for a future alternative to | ||
| 516 | - QPDFObjectHandle that is more idiomatic C++ and has greater type | ||
| 517 | - safety. | 509 | + * More optimizations and cleanup from m-holger (#726, #730) |
| 510 | + including major refactor of QPDF's internal representations of | ||
| 511 | + objects. In addition to a large performance improvement, this also | ||
| 512 | + made it possible for QPDFObjectHandle::getOwningQPDF() to return a | ||
| 513 | + null pointer if the owning QPDF had been destroyed. (A more | ||
| 514 | + complete solution to this problem will be introduced for qpdf 12.) | ||
| 515 | + This work also paves the way for a future alternative to | ||
| 516 | + QPDFObjectHandle that is more idiomatic C++ and has greater type | ||
| 517 | + safety. | ||
| 518 | 518 | ||
| 519 | 2022-08-31 Jay Berkenbilt <ejb@ql.org> | 519 | 2022-08-31 Jay Berkenbilt <ejb@ql.org> |
| 520 | 520 | ||
| 521 | - * From m-holger (#729): refactor QPDF's parser into a new | ||
| 522 | - QPDFParser class, cleaning the code, significantly improving | ||
| 523 | - performance. | 521 | + * From m-holger (#729): refactor QPDF's parser into a new |
| 522 | + QPDFParser class, cleaning the code, significantly improving | ||
| 523 | + performance. | ||
| 524 | 524 | ||
| 525 | 2022-08-27 Jay Berkenbilt <ejb@ql.org> | 525 | 2022-08-27 Jay Berkenbilt <ejb@ql.org> |
| 526 | 526 | ||
| 527 | - * From m-holger: major refactoring of QPDFTokenizer to improve | ||
| 528 | - readability and to optimize performance. This also included some | ||
| 529 | - optimizations to some InputSource classes. Thanks for this | ||
| 530 | - excellent contribution. Fixes #749, #442. | 527 | + * From m-holger: major refactoring of QPDFTokenizer to improve |
| 528 | + readability and to optimize performance. This also included some | ||
| 529 | + optimizations to some InputSource classes. Thanks for this | ||
| 530 | + excellent contribution. Fixes #749, #442. | ||
| 531 | 531 | ||
| 532 | 2022-08-07 Jay Berkenbilt <ejb@ql.org> | 532 | 2022-08-07 Jay Berkenbilt <ejb@ql.org> |
| 533 | 533 | ||
| 534 | - * Add new build configuration option ENABLE_QTC, which is off by | ||
| 535 | - default when not running in MAINTAINER_MODE. When this is off, | ||
| 536 | - QTC coverage calls sprinkled throughout the qpdf source code are | ||
| 537 | - compiled out for increased performance. See "Build Options" in the | ||
| 538 | - manual for a discussion. Fixes #714. | 534 | + * Add new build configuration option ENABLE_QTC, which is off by |
| 535 | + default when not running in MAINTAINER_MODE. When this is off, | ||
| 536 | + QTC coverage calls sprinkled throughout the qpdf source code are | ||
| 537 | + compiled out for increased performance. See "Build Options" in the | ||
| 538 | + manual for a discussion. Fixes #714. | ||
| 539 | 539 | ||
| 540 | 2022-08-06 Jay Berkenbilt <ejb@ql.org> | 540 | 2022-08-06 Jay Berkenbilt <ejb@ql.org> |
| 541 | 541 | ||
| 542 | - * Added by m-holger: QPDF::getObject() method as a simpler form of | ||
| 543 | - getObjectByID or getObjectByObjGen. The older methods are being | ||
| 544 | - retained for compatibility and are not deprecated. | 542 | + * Added by m-holger: QPDF::getObject() method as a simpler form of |
| 543 | + getObjectByID or getObjectByObjGen. The older methods are being | ||
| 544 | + retained for compatibility and are not deprecated. | ||
| 545 | 545 | ||
| 546 | 2022-07-24 Jay Berkenbilt <ejb@ql.org> | 546 | 2022-07-24 Jay Berkenbilt <ejb@ql.org> |
| 547 | 547 | ||
| 548 | - * include/qpdf/JSON.hh: Schema validation: allow a single item to | ||
| 549 | - appear anywhere that the schema has an array of a single item. | ||
| 550 | - This makes it possible to change an element of the schema from an | ||
| 551 | - item to an array to allow the data to accept an array where a | ||
| 552 | - single value was previously required. This change is needed to | ||
| 553 | - allow QPDFJob JSON to start accepting multiple items where a | ||
| 554 | - single item used to be expected without breaking backward | ||
| 555 | - compatibility. Without this change, the earlier fix to | ||
| 556 | - removeAttachment would be a breaking change. Also allow the schema | ||
| 557 | - to contain a multi-element array, which means that the output has | ||
| 558 | - to have an array of the same length in the corresponding location, | ||
| 559 | - and each element is validated against the corresponding schema | ||
| 560 | - element. | ||
| 561 | - | ||
| 562 | - * QPDFObjectHandle: for the methods insertItem, appendItem, | ||
| 563 | - eraseItem, replaceKey, and removeKey, add a corresponding | ||
| 564 | - "AndGetNew" and/or "AndGetOld" methods. The ones that end with | ||
| 565 | - "AndGetNew" return the newly added item. The ones that end with | ||
| 566 | - "AndGetOld" return the old value. The AndGetNew methods make it | ||
| 567 | - possible to create a new object, add it to an array or dictionary, | ||
| 568 | - and get a handle to it all in one line. The AndGetOld methods make | ||
| 569 | - it easier to retrieve an old value when removing or replacing it. | ||
| 570 | - | ||
| 571 | - * Thanks to m-holger for doing significant cleanup of private APIs | ||
| 572 | - and internals around QPDFObjGen and for significantly improving | ||
| 573 | - the performance of QPDFObjGen -- See #731. This includes a few | ||
| 574 | - user-visible changes: | ||
| 575 | - - Addition of QPDFObjectHandle::StreamDataProvider::provideStreamData | ||
| 576 | - overloads that take QPDFObjGen | ||
| 577 | - - Addition of an optional argument to QPDFObjGen::unparse allowing | ||
| 578 | - specification of a separator character, with the default | ||
| 579 | - resulting in the old behavior | ||
| 580 | - Examples have been updated to use improved APIs. The old | ||
| 581 | - provideStreamData overloads will continue to be supported, so | ||
| 582 | - updating older code to use the new interfaces is entirely at the | ||
| 583 | - programmer's discretion. | 548 | + * include/qpdf/JSON.hh: Schema validation: allow a single item to |
| 549 | + appear anywhere that the schema has an array of a single item. | ||
| 550 | + This makes it possible to change an element of the schema from an | ||
| 551 | + item to an array to allow the data to accept an array where a | ||
| 552 | + single value was previously required. This change is needed to | ||
| 553 | + allow QPDFJob JSON to start accepting multiple items where a | ||
| 554 | + single item used to be expected without breaking backward | ||
| 555 | + compatibility. Without this change, the earlier fix to | ||
| 556 | + removeAttachment would be a breaking change. Also allow the schema | ||
| 557 | + to contain a multi-element array, which means that the output has | ||
| 558 | + to have an array of the same length in the corresponding location, | ||
| 559 | + and each element is validated against the corresponding schema | ||
| 560 | + element. | ||
| 561 | + | ||
| 562 | + * QPDFObjectHandle: for the methods insertItem, appendItem, | ||
| 563 | + eraseItem, replaceKey, and removeKey, add a corresponding | ||
| 564 | + "AndGetNew" and/or "AndGetOld" methods. The ones that end with | ||
| 565 | + "AndGetNew" return the newly added item. The ones that end with | ||
| 566 | + "AndGetOld" return the old value. The AndGetNew methods make it | ||
| 567 | + possible to create a new object, add it to an array or dictionary, | ||
| 568 | + and get a handle to it all in one line. The AndGetOld methods make | ||
| 569 | + it easier to retrieve an old value when removing or replacing it. | ||
| 570 | + | ||
| 571 | + * Thanks to m-holger for doing significant cleanup of private APIs | ||
| 572 | + and internals around QPDFObjGen and for significantly improving | ||
| 573 | + the performance of QPDFObjGen -- See #731. This includes a few | ||
| 574 | + user-visible changes: | ||
| 575 | + - Addition of QPDFObjectHandle::StreamDataProvider::provideStreamData | ||
| 576 | + overloads that take QPDFObjGen | ||
| 577 | + - Addition of an optional argument to QPDFObjGen::unparse allowing | ||
| 578 | + specification of a separator character, with the default | ||
| 579 | + resulting in the old behavior | ||
| 580 | + Examples have been updated to use improved APIs. The old | ||
| 581 | + provideStreamData overloads will continue to be supported, so | ||
| 582 | + updating older code to use the new interfaces is entirely at the | ||
| 583 | + programmer's discretion. | ||
| 584 | 584 | ||
| 585 | 2022-06-25 Jay Berkenbilt <ejb@ql.org> | 585 | 2022-06-25 Jay Berkenbilt <ejb@ql.org> |
| 586 | 586 | ||
| 587 | - * Add tracking methods QPDF::everCalledGetAllPages() and | ||
| 588 | - QPDF::everPushedInheritedAttributesToPages(). Since those methods | ||
| 589 | - may have the side effect of creating new objects and replace | ||
| 590 | - objects in various places in the pages tree, it's useful to be | ||
| 591 | - able to find out whether they've ever been called. | 587 | + * Add tracking methods QPDF::everCalledGetAllPages() and |
| 588 | + QPDF::everPushedInheritedAttributesToPages(). Since those methods | ||
| 589 | + may have the side effect of creating new objects and replace | ||
| 590 | + objects in various places in the pages tree, it's useful to be | ||
| 591 | + able to find out whether they've ever been called. | ||
| 592 | 592 | ||
| 593 | 2022-06-18 Jay Berkenbilt <ejb@ql.org> | 593 | 2022-06-18 Jay Berkenbilt <ejb@ql.org> |
| 594 | 594 | ||
| 595 | - * Add QPDFJob::registerProgressReporter, making it possible to | ||
| 596 | - override the progress reporter that is used when --progress (or | ||
| 597 | - the equivalent) is configured with QPDFJob. This is | ||
| 598 | - qpdfjob_register_progress_reporter in the C API. | 595 | + * Add QPDFJob::registerProgressReporter, making it possible to |
| 596 | + override the progress reporter that is used when --progress (or | ||
| 597 | + the equivalent) is configured with QPDFJob. This is | ||
| 598 | + qpdfjob_register_progress_reporter in the C API. | ||
| 599 | 599 | ||
| 600 | - * Add examples that show how to capture QPDFJob's output by | ||
| 601 | - configuring the default logger (qpdfjob-save-attachment.cc, | ||
| 602 | - qpdfjob-c-save-attachment.c). Fixes #691. | 600 | + * Add examples that show how to capture QPDFJob's output by |
| 601 | + configuring the default logger (qpdfjob-save-attachment.cc, | ||
| 602 | + qpdfjob-c-save-attachment.c). Fixes #691. | ||
| 603 | 603 | ||
| 604 | - * Add C API for QPDFLogger -- see qpdflogger-c.h | 604 | + * Add C API for QPDFLogger -- see qpdflogger-c.h |
| 605 | 605 | ||
| 606 | - * Add additional qpdfjob C API functions take a handle. | 606 | + * Add additional qpdfjob C API functions take a handle. |
| 607 | 607 | ||
| 608 | - * Add qpdf_exit_code_e to Constants.h so that exit codes from | ||
| 609 | - QPDFJob are accessible to the C API. | 608 | + * Add qpdf_exit_code_e to Constants.h so that exit codes from |
| 609 | + QPDFJob are accessible to the C API. | ||
| 610 | 610 | ||
| 611 | - * When --progress or --verbose is combined with writing to | ||
| 612 | - standard output, progress reporting and verbose messages go to | ||
| 613 | - standard error. Previously it was disabled in this case. | 611 | + * When --progress or --verbose is combined with writing to |
| 612 | + standard output, progress reporting and verbose messages go to | ||
| 613 | + standard error. Previously it was disabled in this case. | ||
| 614 | 614 | ||
| 615 | 2022-06-05 Jay Berkenbilt <ejb@ql.org> | 615 | 2022-06-05 Jay Berkenbilt <ejb@ql.org> |
| 616 | 616 | ||
| 617 | - * QPDFJob: API breaking change: QPDFJob::doIfVerbose passes a | ||
| 618 | - Pipeline& rather than a std::ostream& to the the callback | ||
| 619 | - function. | 617 | + * QPDFJob: API breaking change: QPDFJob::doIfVerbose passes a |
| 618 | + Pipeline& rather than a std::ostream& to the the callback | ||
| 619 | + function. | ||
| 620 | 620 | ||
| 621 | - * Add integer types to pipeline's operator<<: short, int, long, | ||
| 622 | - long long, unsigned short, unsigned int, unsigned long, unsigned | ||
| 623 | - long long. | 621 | + * Add integer types to pipeline's operator<<: short, int, long, |
| 622 | + long long, unsigned short, unsigned int, unsigned long, unsigned | ||
| 623 | + long long. | ||
| 624 | 624 | ||
| 625 | 2022-05-30 Jay Berkenbilt <ejb@ql.org> | 625 | 2022-05-30 Jay Berkenbilt <ejb@ql.org> |
| 626 | 626 | ||
| 627 | - * qpdf JSON is now at version 2. New command-line arguments: | ||
| 628 | - --json-output, --json-input, --update-from-json. New methods | ||
| 629 | - QPDF::writeJSON, QPDF::createFromJSON, QPDF::updateFromJSON. For | ||
| 630 | - details, see the "qpdf JSON" chapter of the manual. | 627 | + * qpdf JSON is now at version 2. New command-line arguments: |
| 628 | + --json-output, --json-input, --update-from-json. New methods | ||
| 629 | + QPDF::writeJSON, QPDF::createFromJSON, QPDF::updateFromJSON. For | ||
| 630 | + details, see the "qpdf JSON" chapter of the manual. | ||
| 631 | 631 | ||
| 632 | - * When showing encryption data in json output, when the user | ||
| 633 | - password was recovered with by the owner password and the | ||
| 634 | - specified password does not match the user password, reveal the | ||
| 635 | - user password. This is not possible with 256-bit keys. | 632 | + * When showing encryption data in json output, when the user |
| 633 | + password was recovered with by the owner password and the | ||
| 634 | + specified password does not match the user password, reveal the | ||
| 635 | + user password. This is not possible with 256-bit keys. | ||
| 636 | 636 | ||
| 637 | - * Include additional information in --list-attachments --verbose | ||
| 638 | - and in --json --json-key=attachments. | 637 | + * Include additional information in --list-attachments --verbose |
| 638 | + and in --json --json-key=attachments. | ||
| 639 | 639 | ||
| 640 | - * Add QUtil::qpdf_time_to_iso8601 and QUtil::pdf_time_to_iso8601 | ||
| 641 | - for converting PDF/qpdf timestamps to ISO-8601 date format. | 640 | + * Add QUtil::qpdf_time_to_iso8601 and QUtil::pdf_time_to_iso8601 |
| 641 | + for converting PDF/qpdf timestamps to ISO-8601 date format. | ||
| 642 | 642 | ||
| 643 | 2022-05-18 Jay Berkenbilt <ejb@ql.org> | 643 | 2022-05-18 Jay Berkenbilt <ejb@ql.org> |
| 644 | 644 | ||
| 645 | - * Add QUtil::FileCloser to the public API. This is a simple inline | ||
| 646 | - class to help with automatic file closing. | 645 | + * Add QUtil::FileCloser to the public API. This is a simple inline |
| 646 | + class to help with automatic file closing. | ||
| 647 | 647 | ||
| 648 | 2022-05-17 Jay Berkenbilt <ejb@ql.org> | 648 | 2022-05-17 Jay Berkenbilt <ejb@ql.org> |
| 649 | 649 | ||
| 650 | - * Allow passing *uninitialized* (not null) objects to | ||
| 651 | - replaceStreamData as filter and/or decode_parms to leave any | ||
| 652 | - existing values for /Filter and /DecodeParms untouched. | 650 | + * Allow passing *uninitialized* (not null) objects to |
| 651 | + replaceStreamData as filter and/or decode_parms to leave any | ||
| 652 | + existing values for /Filter and /DecodeParms untouched. | ||
| 653 | 653 | ||
| 654 | 2022-05-15 Jay Berkenbilt <ejb@ql.org> | 654 | 2022-05-15 Jay Berkenbilt <ejb@ql.org> |
| 655 | 655 | ||
| 656 | - * Add QUtil::is_long_long to test whether a string can be | ||
| 657 | - converted to a long long and back without loss of information. | 656 | + * Add QUtil::is_long_long to test whether a string can be |
| 657 | + converted to a long long and back without loss of information. | ||
| 658 | 658 | ||
| 659 | 2022-05-04 Jay Berkenbilt <ejb@ql.org> | 659 | 2022-05-04 Jay Berkenbilt <ejb@ql.org> |
| 660 | 660 | ||
| 661 | - * JSON: add a new "blob" type that takes a function to write data | ||
| 662 | - into. The blob is serialized as a base64-encoded representation of | ||
| 663 | - whatever is written to the function. | 661 | + * JSON: add a new "blob" type that takes a function to write data |
| 662 | + into. The blob is serialized as a base64-encoded representation of | ||
| 663 | + whatever is written to the function. | ||
| 664 | 664 | ||
| 665 | - * FileInputSource has new constructors that eliminate the need to | ||
| 666 | - call setFilename or setFile in most cases. | 665 | + * FileInputSource has new constructors that eliminate the need to |
| 666 | + call setFilename or setFile in most cases. | ||
| 667 | 667 | ||
| 668 | - * Enhance JSON by adding a write method that takes a Pipeline* and | ||
| 669 | - depth, and add several helper methods to make it easier to write | ||
| 670 | - large amounts of JSON incrementally without having to have the | ||
| 671 | - whole thing in memory. | 668 | + * Enhance JSON by adding a write method that takes a Pipeline* and |
| 669 | + depth, and add several helper methods to make it easier to write | ||
| 670 | + large amounts of JSON incrementally without having to have the | ||
| 671 | + whole thing in memory. | ||
| 672 | 672 | ||
| 673 | - * json v1 output: make "pages" and "objects" consistent. | ||
| 674 | - Previously, "objects" always reflected the objects exactly as they | ||
| 675 | - appeared in the original file, while "pages" reflected objects | ||
| 676 | - after repair of the pages tree. This could be misleading. Now, if | ||
| 677 | - "pages" is specified, "objects" shows the effects of repairing the | ||
| 678 | - page tree, and if not, it doesn't. This makes no difference for | ||
| 679 | - correct PDF files that don't have problems in the pages tree. JSON | ||
| 680 | - v2 will behave in a similar way. | 673 | + * json v1 output: make "pages" and "objects" consistent. |
| 674 | + Previously, "objects" always reflected the objects exactly as they | ||
| 675 | + appeared in the original file, while "pages" reflected objects | ||
| 676 | + after repair of the pages tree. This could be misleading. Now, if | ||
| 677 | + "pages" is specified, "objects" shows the effects of repairing the | ||
| 678 | + page tree, and if not, it doesn't. This makes no difference for | ||
| 679 | + correct PDF files that don't have problems in the pages tree. JSON | ||
| 680 | + v2 will behave in a similar way. | ||
| 681 | 681 | ||
| 682 | 2022-05-03 Jay Berkenbilt <ejb@ql.org> | 682 | 2022-05-03 Jay Berkenbilt <ejb@ql.org> |
| 683 | 683 | ||
| 684 | - * Add new Pipeline class Pl_String which appends to a std::string& | ||
| 685 | - passed to it at construction. | 684 | + * Add new Pipeline class Pl_String which appends to a std::string& |
| 685 | + passed to it at construction. | ||
| 686 | 686 | ||
| 687 | - * Add new Pipeline class Pl_OStream, similar to Pl_StdioFile but | ||
| 688 | - takes a std::ostream instead of a FILE*. | 687 | + * Add new Pipeline class Pl_OStream, similar to Pl_StdioFile but |
| 688 | + takes a std::ostream instead of a FILE*. | ||
| 689 | 689 | ||
| 690 | - * Add new convenience methods to Pipeline: writeCStr and | ||
| 691 | - writeString. Also add a limit << operator that takes C strings and | ||
| 692 | - std::strings. Also add an overloaded version of write that takes | ||
| 693 | - "char const*". | 690 | + * Add new convenience methods to Pipeline: writeCStr and |
| 691 | + writeString. Also add a limit << operator that takes C strings and | ||
| 692 | + std::strings. Also add an overloaded version of write that takes | ||
| 693 | + "char const*". | ||
| 694 | 694 | ||
| 695 | - * API change: Pipeline::write now takes "unsigned char const *" | ||
| 696 | - instead of "unsigned char*". Callers shouldn't have to change | ||
| 697 | - anything, though can stop using writable strings or | ||
| 698 | - QUtil::unsigned_char_pointer. If you have implemented your own | ||
| 699 | - pipelines, you should change your write method to take a const | ||
| 700 | - pointer. | 695 | + * API change: Pipeline::write now takes "unsigned char const *" |
| 696 | + instead of "unsigned char*". Callers shouldn't have to change | ||
| 697 | + anything, though can stop using writable strings or | ||
| 698 | + QUtil::unsigned_char_pointer. If you have implemented your own | ||
| 699 | + pipelines, you should change your write method to take a const | ||
| 700 | + pointer. | ||
| 701 | 701 | ||
| 702 | 2022-05-01 Jay Berkenbilt <ejb@ql.org> | 702 | 2022-05-01 Jay Berkenbilt <ejb@ql.org> |
| 703 | 703 | ||
| 704 | - * JSON: add reactors to the JSON parser, making it possible to | ||
| 705 | - react to JSON parsing events as they occur and to block the | ||
| 706 | - results from being stored. This makes it possible to incrementally | ||
| 707 | - parse arbitrarily large JSON inputs. | 704 | + * JSON: add reactors to the JSON parser, making it possible to |
| 705 | + react to JSON parsing events as they occur and to block the | ||
| 706 | + results from being stored. This makes it possible to incrementally | ||
| 707 | + parse arbitrarily large JSON inputs. | ||
| 708 | 708 | ||
| 709 | 2022-04-30 Jay Berkenbilt <ejb@ql.org> | 709 | 2022-04-30 Jay Berkenbilt <ejb@ql.org> |
| 710 | 710 | ||
| 711 | - * QPDFWriter: change encryption API calls | ||
| 712 | - - Remove deprecated versions of setR*EncryptionParameters | ||
| 713 | - methods from before qpdf 8.4.0 | ||
| 714 | - - Replace setR2EncryptionParameters with | ||
| 715 | - setR2EncryptionParametersInsecure | ||
| 716 | - - Replace setR3EncryptionParameters with | ||
| 717 | - setR3EncryptionParametersInsecure | ||
| 718 | - - Replace setR4EncryptionParameters with | ||
| 719 | - setR4EncryptionParametersInsecure | ||
| 720 | - | ||
| 721 | - * C API: change encryption API calls to match C++ interface | ||
| 722 | - - Remove pre-8.4.0 functions: | ||
| 723 | - - qpdf_set_r3_encryption_parameters | ||
| 724 | - - qpdf_set_r4_encryption_parameters | ||
| 725 | - - qpdf_set_r5_encryption_parameters | ||
| 726 | - - qpdf_set_r6_encryption_parameters | ||
| 727 | - - Add "_insecure" to insecure encryption triggers: | ||
| 728 | - - Replace void qpdf_set_r2_encryption_parameters | ||
| 729 | - with qpdf_set_r2_encryption_parameters_insecure | ||
| 730 | - - Replace void qpdf_set_r3_encryption_parameters2 | ||
| 731 | - with qpdf_set_r3_encryption_parameters_insecure | ||
| 732 | - - Replace void qpdf_set_r4_encryption_parameters2 | ||
| 733 | - with qpdf_set_r4_encryption_parameters_insecure | ||
| 734 | - | ||
| 735 | - * Make attempting to write encrypted files that use RC4 (40-bit or | ||
| 736 | - 128-bit without AES) an error rather than a warning when | ||
| 737 | - --allow-weak-crypto is not specified. Fixes #576. | 711 | + * QPDFWriter: change encryption API calls |
| 712 | + - Remove deprecated versions of setR*EncryptionParameters | ||
| 713 | + methods from before qpdf 8.4.0 | ||
| 714 | + - Replace setR2EncryptionParameters with | ||
| 715 | + setR2EncryptionParametersInsecure | ||
| 716 | + - Replace setR3EncryptionParameters with | ||
| 717 | + setR3EncryptionParametersInsecure | ||
| 718 | + - Replace setR4EncryptionParameters with | ||
| 719 | + setR4EncryptionParametersInsecure | ||
| 720 | + | ||
| 721 | + * C API: change encryption API calls to match C++ interface | ||
| 722 | + - Remove pre-8.4.0 functions: | ||
| 723 | + - qpdf_set_r3_encryption_parameters | ||
| 724 | + - qpdf_set_r4_encryption_parameters | ||
| 725 | + - qpdf_set_r5_encryption_parameters | ||
| 726 | + - qpdf_set_r6_encryption_parameters | ||
| 727 | + - Add "_insecure" to insecure encryption triggers: | ||
| 728 | + - Replace void qpdf_set_r2_encryption_parameters | ||
| 729 | + with qpdf_set_r2_encryption_parameters_insecure | ||
| 730 | + - Replace void qpdf_set_r3_encryption_parameters2 | ||
| 731 | + with qpdf_set_r3_encryption_parameters_insecure | ||
| 732 | + - Replace void qpdf_set_r4_encryption_parameters2 | ||
| 733 | + with qpdf_set_r4_encryption_parameters_insecure | ||
| 734 | + | ||
| 735 | + * Make attempting to write encrypted files that use RC4 (40-bit or | ||
| 736 | + 128-bit without AES) an error rather than a warning when | ||
| 737 | + --allow-weak-crypto is not specified. Fixes #576. | ||
| 738 | 738 | ||
| 739 | 2022-04-24 Jay Berkenbilt <ejb@ql.org> | 739 | 2022-04-24 Jay Berkenbilt <ejb@ql.org> |
| 740 | 740 | ||
| 741 | - * Bug fix: "removeAttachment" in the job JSON now takes an array | ||
| 742 | - of strings instead of a string. It should have taken an array of | ||
| 743 | - strings since the corresponding command-line argument, | ||
| 744 | - --remove-attachment, is repeatable. Fixes #693. | 741 | + * Bug fix: "removeAttachment" in the job JSON now takes an array |
| 742 | + of strings instead of a string. It should have taken an array of | ||
| 743 | + strings since the corresponding command-line argument, | ||
| 744 | + --remove-attachment, is repeatable. Fixes #693. | ||
| 745 | 745 | ||
| 746 | - * Deprecate QPDFObjectHandle::replaceOrRemoveKey -- it does and | ||
| 747 | - always has done the same thing as replaceKey. | 746 | + * Deprecate QPDFObjectHandle::replaceOrRemoveKey -- it does and |
| 747 | + always has done the same thing as replaceKey. | ||
| 748 | 748 | ||
| 749 | 2022-04-23 Jay Berkenbilt <ejb@ql.org> | 749 | 2022-04-23 Jay Berkenbilt <ejb@ql.org> |
| 750 | 750 | ||
| 751 | - * Add a new QPDF::warn method that takes the parameters of | ||
| 752 | - QPDFExc's constructor except for the filename, which is taken from | ||
| 753 | - the QPDF object. This is a shorter way to issue warnings on behalf | ||
| 754 | - of a QPDF object. | 751 | + * Add a new QPDF::warn method that takes the parameters of |
| 752 | + QPDFExc's constructor except for the filename, which is taken from | ||
| 753 | + the QPDF object. This is a shorter way to issue warnings on behalf | ||
| 754 | + of a QPDF object. | ||
| 755 | 755 | ||
| 756 | * Add new method QUtil::is_explicit_utf8 that tests whether a | 756 | * Add new method QUtil::is_explicit_utf8 that tests whether a |
| 757 | string is explicitly marked as being UTF-8 encoded, as allowed by | 757 | string is explicitly marked as being UTF-8 encoded, as allowed by |
| @@ -2763,7 +2763,7 @@ | @@ -2763,7 +2763,7 @@ | ||
| 2763 | 2763 | ||
| 2764 | 2019-01-03 Jay Berkenbilt <ejb@ql.org> | 2764 | 2019-01-03 Jay Berkenbilt <ejb@ql.org> |
| 2765 | 2765 | ||
| 2766 | - * Add --generate-appearances flag to the qpdf command-line tool to | 2766 | + * Add --generate-appearances flag to the qpdf command-line tool to |
| 2767 | trigger generation of appearance streams. | 2767 | trigger generation of appearance streams. |
| 2768 | 2768 | ||
| 2769 | * Fix behavior of form field value setting to handle the following | 2769 | * Fix behavior of form field value setting to handle the following |
| @@ -3168,7 +3168,7 @@ | @@ -3168,7 +3168,7 @@ | ||
| 3168 | 3168 | ||
| 3169 | 2018-02-04 Jay Berkenbilt <ejb@ql.org> | 3169 | 2018-02-04 Jay Berkenbilt <ejb@ql.org> |
| 3170 | 3170 | ||
| 3171 | - * Changes listed on today's date are numerous and reflect | 3171 | + * Changes listed on today's date are numerous and reflect |
| 3172 | significant enhancements to qpdf's lexical layer. While many | 3172 | significant enhancements to qpdf's lexical layer. While many |
| 3173 | nuances are discussed and a handful of small bugs were fixed, it | 3173 | nuances are discussed and a handful of small bugs were fixed, it |
| 3174 | should be emphasized that none of these issues have any impact on | 3174 | should be emphasized that none of these issues have any impact on |
| @@ -3503,7 +3503,7 @@ | @@ -3503,7 +3503,7 @@ | ||
| 3503 | - New command-line flags --compress-streams and --decode-level | 3503 | - New command-line flags --compress-streams and --decode-level |
| 3504 | to replace/enhance --stream-data | 3504 | to replace/enhance --stream-data |
| 3505 | - New QPDFWriter::setCompressStreams and | 3505 | - New QPDFWriter::setCompressStreams and |
| 3506 | - QPDFWriter::setDecodeLevel methods | 3506 | + QPDFWriter::setDecodeLevel methods |
| 3507 | Please see documentation, header files, and help messages for | 3507 | Please see documentation, header files, and help messages for |
| 3508 | details on these new features. | 3508 | details on these new features. |
| 3509 | 3509 | ||
| @@ -3736,7 +3736,7 @@ | @@ -3736,7 +3736,7 @@ | ||
| 3736 | * Bug fix: if the last object in the first part of a linearized | 3736 | * Bug fix: if the last object in the first part of a linearized |
| 3737 | file had an offset that was below 65536 by less than the size of | 3737 | file had an offset that was below 65536 by less than the size of |
| 3738 | the hint stream, the xref stream was invalid and the resulting file | 3738 | the hint stream, the xref stream was invalid and the resulting file |
| 3739 | - is not usable. This is now fixed. | 3739 | + is not usable. This is now fixed. |
| 3740 | 3740 | ||
| 3741 | 2014-01-14 Jay Berkenbilt <ejb@ql.org> | 3741 | 2014-01-14 Jay Berkenbilt <ejb@ql.org> |
| 3742 | 3742 | ||
| @@ -3747,7 +3747,7 @@ | @@ -3747,7 +3747,7 @@ | ||
| 3747 | * Bug fix: when copying foreign objects (which occurs during page | 3747 | * Bug fix: when copying foreign objects (which occurs during page |
| 3748 | splitting among other cases), avoid traversing the same object | 3748 | splitting among other cases), avoid traversing the same object |
| 3749 | more than once if it appears more than once in the same direct | 3749 | more than once if it appears more than once in the same direct |
| 3750 | - object. This bug is performance-only and does not affect the | 3750 | + object. This bug is performance-only and does not affect the |
| 3751 | actual output. | 3751 | actual output. |
| 3752 | 3752 | ||
| 3753 | 2013-12-17 Jay Berkenbilt <ejb@ql.org> | 3753 | 2013-12-17 Jay Berkenbilt <ejb@ql.org> |
| @@ -3811,7 +3811,7 @@ | @@ -3811,7 +3811,7 @@ | ||
| 3811 | * 5.0.1: release | 3811 | * 5.0.1: release |
| 3812 | 3812 | ||
| 3813 | * Warn when -accessibility=n is specified with a modern encryption | 3813 | * Warn when -accessibility=n is specified with a modern encryption |
| 3814 | - format (R > 3). Also, accept this flag (and ignore with warning) | 3814 | + format (R > 3). Also, accept this flag (and ignore with warning) |
| 3815 | with 256-bit encryption. qpdf has always ignored the | 3815 | with 256-bit encryption. qpdf has always ignored the |
| 3816 | accessibility setting with R > 3, but it previously did so | 3816 | accessibility setting with R > 3, but it previously did so |
| 3817 | silently. | 3817 | silently. |
| @@ -3838,7 +3838,7 @@ | @@ -3838,7 +3838,7 @@ | ||
| 3838 | data in linearization hint streams. | 3838 | data in linearization hint streams. |
| 3839 | 3839 | ||
| 3840 | * Security fix: sanitize /W array in cross reference stream to | 3840 | * Security fix: sanitize /W array in cross reference stream to |
| 3841 | - avoid a potential integer overflow in a multiplication. It is | 3841 | + avoid a potential integer overflow in a multiplication. It is |
| 3842 | unlikely that any exploits were possible from this bug as | 3842 | unlikely that any exploits were possible from this bug as |
| 3843 | additional checks were also performed. | 3843 | additional checks were also performed. |
| 3844 | 3844 | ||
| @@ -3859,7 +3859,7 @@ | @@ -3859,7 +3859,7 @@ | ||
| 3859 | 3859 | ||
| 3860 | * Security fix: in QUtil::toUTF8, change bounds checking to avoid | 3860 | * Security fix: in QUtil::toUTF8, change bounds checking to avoid |
| 3861 | having a pointer point temporarily outside the bounds of an | 3861 | having a pointer point temporarily outside the bounds of an |
| 3862 | - array. Some compiler optimizations could have made the original | 3862 | + array. Some compiler optimizations could have made the original |
| 3863 | code unsafe. | 3863 | code unsafe. |
| 3864 | 3864 | ||
| 3865 | 2013-07-10 Jay Berkenbilt <ejb@ql.org> | 3865 | 2013-07-10 Jay Berkenbilt <ejb@ql.org> |
| @@ -3907,8 +3907,8 @@ | @@ -3907,8 +3907,8 @@ | ||
| 3907 | 2013-06-14 Jay Berkenbilt <ejb@ql.org> | 3907 | 2013-06-14 Jay Berkenbilt <ejb@ql.org> |
| 3908 | 3908 | ||
| 3909 | * Detect and correct /Outlines dictionary being a direct object | 3909 | * Detect and correct /Outlines dictionary being a direct object |
| 3910 | - when linearizing files. This is not allowed by the spec but has | ||
| 3911 | - been seen in the wild. Prior to this change, such a file would | 3910 | + when linearizing files. This is not allowed by the spec but has |
| 3911 | + been seen in the wild. Prior to this change, such a file would | ||
| 3912 | cause an internal error in the linearization code, which assumed | 3912 | cause an internal error in the linearization code, which assumed |
| 3913 | /Outlines was indirect. | 3913 | /Outlines was indirect. |
| 3914 | 3914 | ||
| @@ -3941,7 +3941,7 @@ | @@ -3941,7 +3941,7 @@ | ||
| 3941 | 2013-03-11 Jay Berkenbilt <ejb@ql.org> | 3941 | 2013-03-11 Jay Berkenbilt <ejb@ql.org> |
| 3942 | 3942 | ||
| 3943 | * When creating Windows binary distributions, make sure to only | 3943 | * When creating Windows binary distributions, make sure to only |
| 3944 | - copy DLLs of the correct type. The ensures that the 32-bit | 3944 | + copy DLLs of the correct type. The ensures that the 32-bit |
| 3945 | distributions contain 32-bit DLLs and the 64-bit distributions | 3945 | distributions contain 32-bit DLLs and the 64-bit distributions |
| 3946 | contain 64-bit DLLs. | 3946 | contain 64-bit DLLs. |
| 3947 | 3947 | ||
| @@ -3963,7 +3963,7 @@ | @@ -3963,7 +3963,7 @@ | ||
| 3963 | warnings. This is useful for people who may want to use qpdf in | 3963 | warnings. This is useful for people who may want to use qpdf in |
| 3964 | an application that is Windows 8 certified. | 3964 | an application that is Windows 8 certified. |
| 3965 | 3965 | ||
| 3966 | - * New method QUtil::safe_fopen to wrap calls to fopen. This is | 3966 | + * New method QUtil::safe_fopen to wrap calls to fopen. This is |
| 3967 | less cumbersome than calling QUtil::fopen_wrapper. | 3967 | less cumbersome than calling QUtil::fopen_wrapper. |
| 3968 | 3968 | ||
| 3969 | * Remove all calls to sprintf | 3969 | * Remove all calls to sprintf |
| @@ -3982,7 +3982,7 @@ | @@ -3982,7 +3982,7 @@ | ||
| 3982 | * Bug fix: properly handle overridden compressed objects. When | 3982 | * Bug fix: properly handle overridden compressed objects. When |
| 3983 | caching objects from an object stream, only cache objects that, | 3983 | caching objects from an object stream, only cache objects that, |
| 3984 | based on the xref table, would actually be resolved into this | 3984 | based on the xref table, would actually be resolved into this |
| 3985 | - stream. Prior to this fix, if an object stream A contained an | 3985 | + stream. Prior to this fix, if an object stream A contained an |
| 3986 | object B that was overridden by an appended section of the file, | 3986 | object B that was overridden by an appended section of the file, |
| 3987 | qpdf would cache the old value of B if any non-overridden member | 3987 | qpdf would cache the old value of B if any non-overridden member |
| 3988 | of A was accessed before B. This commit fixes that bug. | 3988 | of A was accessed before B. This commit fixes that bug. |
| @@ -3999,7 +3999,7 @@ | @@ -3999,7 +3999,7 @@ | ||
| 3999 | hexadecimal string | 3999 | hexadecimal string |
| 4000 | 4000 | ||
| 4001 | * qpdf --check was exiting with status 0 in some rare cases even | 4001 | * qpdf --check was exiting with status 0 in some rare cases even |
| 4002 | - when errors were found. It now always exits with one of the | 4002 | + when errors were found. It now always exits with one of the |
| 4003 | document error codes (0 for success, 2 for errors, 3 or warnings). | 4003 | document error codes (0 for success, 2 for errors, 3 or warnings). |
| 4004 | 4004 | ||
| 4005 | 2013-01-24 Jay Berkenbilt <ejb@ql.org> | 4005 | 2013-01-24 Jay Berkenbilt <ejb@ql.org> |
| @@ -4014,20 +4014,20 @@ | @@ -4014,20 +4014,20 @@ | ||
| 4014 | CXXFLAGS and were commingled with other compiler flags. | 4014 | CXXFLAGS and were commingled with other compiler flags. |
| 4015 | 4015 | ||
| 4016 | * qpdf --check now does syntactic checks all pages' content | 4016 | * qpdf --check now does syntactic checks all pages' content |
| 4017 | - streams as well as checking overall document structure. Semantic | 4017 | + streams as well as checking overall document structure. Semantic |
| 4018 | errors are still not checked, and there are no plans to add | 4018 | errors are still not checked, and there are no plans to add |
| 4019 | semantic checks. | 4019 | semantic checks. |
| 4020 | 4020 | ||
| 4021 | 2013-01-22 Jay Berkenbilt <ejb@ql.org> | 4021 | 2013-01-22 Jay Berkenbilt <ejb@ql.org> |
| 4022 | 4022 | ||
| 4023 | - * Add QPDFObjectHandle::getTypeCode(). This method returns a | 4023 | + * Add QPDFObjectHandle::getTypeCode(). This method returns a |
| 4024 | unique integer (enumerated type) value corresponding to the object | 4024 | unique integer (enumerated type) value corresponding to the object |
| 4025 | type of the QPDFObjectHandle. It can be used as an alternative to | 4025 | type of the QPDFObjectHandle. It can be used as an alternative to |
| 4026 | the QPDFObjectHandle::is* methods for type testing, particularly | 4026 | the QPDFObjectHandle::is* methods for type testing, particularly |
| 4027 | where there is a desire to use a switch statement or optimize for | 4027 | where there is a desire to use a switch statement or optimize for |
| 4028 | performance when testing object types. | 4028 | performance when testing object types. |
| 4029 | 4029 | ||
| 4030 | - * Add QPDFObjectHandle::getTypeName(). This method returns a | 4030 | + * Add QPDFObjectHandle::getTypeName(). This method returns a |
| 4031 | string literal describing the object type. It is useful for | 4031 | string literal describing the object type. It is useful for |
| 4032 | testing and debugging. | 4032 | testing and debugging. |
| 4033 | 4033 | ||
| @@ -4035,7 +4035,7 @@ | @@ -4035,7 +4035,7 @@ | ||
| 4035 | 4035 | ||
| 4036 | * Add QPDFObjectHandle::parseContentStream, which parses the | 4036 | * Add QPDFObjectHandle::parseContentStream, which parses the |
| 4037 | objects in a content stream and calls handlers in a callback | 4037 | objects in a content stream and calls handlers in a callback |
| 4038 | - class. The example pdf-parse-content illustrates it use. | 4038 | + class. The example pdf-parse-content illustrates it use. |
| 4039 | 4039 | ||
| 4040 | * Add QPDF_Operator and QPDF_InlineImage types along with | 4040 | * Add QPDF_Operator and QPDF_InlineImage types along with |
| 4041 | appropriate wrapper methods in QPDFObjectHandle. These new object | 4041 | appropriate wrapper methods in QPDFObjectHandle. These new object |
| @@ -4051,7 +4051,7 @@ | @@ -4051,7 +4051,7 @@ | ||
| 4051 | password. | 4051 | password. |
| 4052 | 4052 | ||
| 4053 | * Fix detection of binary attachments in the test suite. This | 4053 | * Fix detection of binary attachments in the test suite. This |
| 4054 | - resolves false test failures on some platforms. No changes to the | 4054 | + resolves false test failures on some platforms. No changes to the |
| 4055 | actual QPDF code were made. | 4055 | actual QPDF code were made. |
| 4056 | 4056 | ||
| 4057 | 2012-12-31 Jay Berkenbilt <ejb@ql.org> | 4057 | 2012-12-31 Jay Berkenbilt <ejb@ql.org> |
| @@ -4086,17 +4086,17 @@ | @@ -4086,17 +4086,17 @@ | ||
| 4086 | 4086 | ||
| 4087 | * Add read/write support for both the deprecated Acrobat IX | 4087 | * Add read/write support for both the deprecated Acrobat IX |
| 4088 | encryption format and the Acrobat X/PDF 2.0 encryption format | 4088 | encryption format and the Acrobat X/PDF 2.0 encryption format |
| 4089 | - using 256-bit AES keys. Using the Acrobat IX format (R=5) forces | ||
| 4090 | - the version of the file to 1.7 with extension level 3. Using the | 4089 | + using 256-bit AES keys. Using the Acrobat IX format (R=5) forces |
| 4090 | + the version of the file to 1.7 with extension level 3. Using the | ||
| 4091 | PDF 2.0 format (R=6) forces it to 1.7 extension level 8. | 4091 | PDF 2.0 format (R=6) forces it to 1.7 extension level 8. |
| 4092 | 4092 | ||
| 4093 | * Add new method QPDF::getEncryptionKey to return the actual | 4093 | * Add new method QPDF::getEncryptionKey to return the actual |
| 4094 | - encryption key used for encryption of data in the file. The key | 4094 | + encryption key used for encryption of data in the file. The key |
| 4095 | is returned as a std::string. | 4095 | is returned as a std::string. |
| 4096 | 4096 | ||
| 4097 | * Non-compatible API change: change signature of | 4097 | * Non-compatible API change: change signature of |
| 4098 | QPDF::compute_data_key to take the R and V values from the | 4098 | QPDF::compute_data_key to take the R and V values from the |
| 4099 | - encryption dictionary. There is no reason for any application | 4099 | + encryption dictionary. There is no reason for any application |
| 4100 | code to call this method since handling of encryption is done | 4100 | code to call this method since handling of encryption is done |
| 4101 | automatically by the qpdf library. It is used internally by | 4101 | automatically by the qpdf library. It is used internally by |
| 4102 | QPDFWriter. | 4102 | QPDFWriter. |
| @@ -4124,7 +4124,7 @@ | @@ -4124,7 +4124,7 @@ | ||
| 4124 | * Fix old bug that could cause an infinite loop if user password | 4124 | * Fix old bug that could cause an infinite loop if user password |
| 4125 | recovery methods were called and a password contained the "(" | 4125 | recovery methods were called and a password contained the "(" |
| 4126 | character (which happens to be the first byte of padding used by | 4126 | character (which happens to be the first byte of padding used by |
| 4127 | - older PDF encryption formats). This bug was noticed while reading | 4127 | + older PDF encryption formats). This bug was noticed while reading |
| 4128 | code and would not happen under ordinary usage patterns even if | 4128 | code and would not happen under ordinary usage patterns even if |
| 4129 | the password contained that character. | 4129 | the password contained that character. |
| 4130 | 4130 | ||
| @@ -4134,15 +4134,15 @@ | @@ -4134,15 +4134,15 @@ | ||
| 4134 | reading and writing. This includes adding method | 4134 | reading and writing. This includes adding method |
| 4135 | QPDF::getExtensionLevel and new versions of | 4135 | QPDF::getExtensionLevel and new versions of |
| 4136 | QPDFWriter::setMinimumPDFVersion and QPDFWriter::forcePDFVersion | 4136 | QPDFWriter::setMinimumPDFVersion and QPDFWriter::forcePDFVersion |
| 4137 | - that support extension levels. The qpdf command-line tool | 4137 | + that support extension levels. The qpdf command-line tool |
| 4138 | interprets version numbers of the form x.y.z as version x.y at | 4138 | interprets version numbers of the form x.y.z as version x.y at |
| 4139 | extension level z. | 4139 | extension level z. |
| 4140 | 4140 | ||
| 4141 | * Update AES classes to support use of 256-bit keys. | 4141 | * Update AES classes to support use of 256-bit keys. |
| 4142 | 4142 | ||
| 4143 | * Non-compatible API change: Removed public method | 4143 | * Non-compatible API change: Removed public method |
| 4144 | - QPDF::flattenScalarReferences. Instead, just flatten the scalar | ||
| 4145 | - references we actually need to flatten. Flattening scalar | 4144 | + QPDF::flattenScalarReferences. Instead, just flatten the scalar |
| 4145 | + references we actually need to flatten. Flattening scalar | ||
| 4146 | references was a wrong decision years ago and has occasionally | 4146 | references was a wrong decision years ago and has occasionally |
| 4147 | caused other problems, among which were that it caused qpdf to | 4147 | caused other problems, among which were that it caused qpdf to |
| 4148 | visit otherwise unreferenced and possibly erroneous objects in the | 4148 | visit otherwise unreferenced and possibly erroneous objects in the |
| @@ -4187,14 +4187,14 @@ | @@ -4187,14 +4187,14 @@ | ||
| 4187 | out the omission. | 4187 | out the omission. |
| 4188 | 4188 | ||
| 4189 | * Ignore (with warning) non-freed objects in the xref table whose | 4189 | * Ignore (with warning) non-freed objects in the xref table whose |
| 4190 | - offset is 0. Some PDF producers (incorrectly) do this. See | 4190 | + offset is 0. Some PDF producers (incorrectly) do this. See |
| 4191 | https://bugs.linuxfoundation.org/show_bug.cgi?id=1081. | 4191 | https://bugs.linuxfoundation.org/show_bug.cgi?id=1081. |
| 4192 | 4192 | ||
| 4193 | 2012-09-23 Jay Berkenbilt <ejb@ql.org> | 4193 | 2012-09-23 Jay Berkenbilt <ejb@ql.org> |
| 4194 | 4194 | ||
| 4195 | * Add public methods QPDF::processInputSource and | 4195 | * Add public methods QPDF::processInputSource and |
| 4196 | QPDFWriter::setOutputPipeline to allow users to read from custom | 4196 | QPDFWriter::setOutputPipeline to allow users to read from custom |
| 4197 | - input sources and to write to custom pipelines. This allows the | 4197 | + input sources and to write to custom pipelines. This allows the |
| 4198 | maximum flexibility in sources for reading and writing PDF files. | 4198 | maximum flexibility in sources for reading and writing PDF files. |
| 4199 | 4199 | ||
| 4200 | 2012-09-06 Jay Berkenbilt <ejb@ql.org> | 4200 | 2012-09-06 Jay Berkenbilt <ejb@ql.org> |
| @@ -4341,7 +4341,7 @@ | @@ -4341,7 +4341,7 @@ | ||
| 4341 | 2012-06-27 Jay Berkenbilt <ejb@ql.org> | 4341 | 2012-06-27 Jay Berkenbilt <ejb@ql.org> |
| 4342 | 4342 | ||
| 4343 | * Add Pl_Concatenate pipeline for stream concatenation also | 4343 | * Add Pl_Concatenate pipeline for stream concatenation also |
| 4344 | - implemented by Tobias Hoffmann. Also added test code | 4344 | + implemented by Tobias Hoffmann. Also added test code |
| 4345 | (libtests/concatenate.cc). | 4345 | (libtests/concatenate.cc). |
| 4346 | 4346 | ||
| 4347 | * Add new methods implemented by Tobias Hoffmann: | 4347 | * Add new methods implemented by Tobias Hoffmann: |
| @@ -4365,7 +4365,7 @@ | @@ -4365,7 +4365,7 @@ | ||
| 4365 | places as well as increasing the amount of padding used when | 4365 | places as well as increasing the amount of padding used when |
| 4366 | creating linearized files. Automated tests for large files are | 4366 | creating linearized files. Automated tests for large files are |
| 4367 | disabled by default. Run ./configure --help for information on | 4367 | disabled by default. Run ./configure --help for information on |
| 4368 | - enabling them. Running the tests requires 11 GB of free disk | 4368 | + enabling them. Running the tests requires 11 GB of free disk |
| 4369 | space and takes several minutes. | 4369 | space and takes several minutes. |
| 4370 | 4370 | ||
| 4371 | 2012-06-22 Jay Berkenbilt <ejb@ql.org> | 4371 | 2012-06-22 Jay Berkenbilt <ejb@ql.org> |
| @@ -4388,11 +4388,11 @@ | @@ -4388,11 +4388,11 @@ | ||
| 4388 | * make/libtool.mk: Place user-specified CPPFLAGS and LDFLAGS later | 4388 | * make/libtool.mk: Place user-specified CPPFLAGS and LDFLAGS later |
| 4389 | in the compilation so that if a user installs things in a | 4389 | in the compilation so that if a user installs things in a |
| 4390 | non-standard place that they have to tell the build about, earlier | 4390 | non-standard place that they have to tell the build about, earlier |
| 4391 | - versions of qpdf installed there won't break the build. Thanks to | 4391 | + versions of qpdf installed there won't break the build. Thanks to |
| 4392 | Macports for reporting this. (Fixes bug 3468860.) | 4392 | Macports for reporting this. (Fixes bug 3468860.) |
| 4393 | 4393 | ||
| 4394 | * Instead of using off_t in the public APIs, use qpdf_offset_t | 4394 | * Instead of using off_t in the public APIs, use qpdf_offset_t |
| 4395 | - instead. This is defined as long long in qpdf/Types.h. If your | 4395 | + instead. This is defined as long long in qpdf/Types.h. If your |
| 4396 | system doesn't support long long, you can redefine it. | 4396 | system doesn't support long long, you can redefine it. |
| 4397 | 4397 | ||
| 4398 | * Add pkg-config files | 4398 | * Add pkg-config files |
| @@ -4427,7 +4427,7 @@ | @@ -4427,7 +4427,7 @@ | ||
| 4427 | 4427 | ||
| 4428 | 2011-04-06 Jay Berkenbilt <ejb@ql.org> | 4428 | 2011-04-06 Jay Berkenbilt <ejb@ql.org> |
| 4429 | 4429 | ||
| 4430 | - * Fix PCRE to stop using deprecated (and now dropped) interfaces. | 4430 | + * Fix PCRE to stop using deprecated (and now dropped) interfaces. |
| 4431 | 4431 | ||
| 4432 | 2011-12-28 Jay Berkenbilt <ejb@ql.org> | 4432 | 2011-12-28 Jay Berkenbilt <ejb@ql.org> |
| 4433 | 4433 | ||
| @@ -4459,13 +4459,13 @@ | @@ -4459,13 +4459,13 @@ | ||
| 4459 | 2011-08-10 Jay Berkenbilt <ejb@ql.org> | 4459 | 2011-08-10 Jay Berkenbilt <ejb@ql.org> |
| 4460 | 4460 | ||
| 4461 | * libqpdf/QPDFWriter.cc (copyEncryptionParameters): preserve | 4461 | * libqpdf/QPDFWriter.cc (copyEncryptionParameters): preserve |
| 4462 | - whether metadata is encryption. This fixes part of bug 3173659: | 4462 | + whether metadata is encryption. This fixes part of bug 3173659: |
| 4463 | the password becomes invalid if qpdf copies an encrypted file with | 4463 | the password becomes invalid if qpdf copies an encrypted file with |
| 4464 | cleartext-metadata. | 4464 | cleartext-metadata. |
| 4465 | 4465 | ||
| 4466 | * include/qpdf/QPDFWriter.hh: add a new constructor that takes | 4466 | * include/qpdf/QPDFWriter.hh: add a new constructor that takes |
| 4467 | only a QPDF reference and leaves specification of output for | 4467 | only a QPDF reference and leaves specification of output for |
| 4468 | - later. Add methods setOutputFilename() to set the output to a | 4468 | + later. Add methods setOutputFilename() to set the output to a |
| 4469 | filename or stdout, and setOutputMemory() to indicate that output | 4469 | filename or stdout, and setOutputMemory() to indicate that output |
| 4470 | should go to a memory buffer. Add method getBuffer() to retrieve | 4470 | should go to a memory buffer. Add method getBuffer() to retrieve |
| 4471 | the buffer used if output was saved to a memory buffer. | 4471 | the buffer used if output was saved to a memory buffer. |
| @@ -4485,7 +4485,7 @@ | @@ -4485,7 +4485,7 @@ | ||
| 4485 | 2011-06-23 Jay Berkenbilt <ejb@ql.org> | 4485 | 2011-06-23 Jay Berkenbilt <ejb@ql.org> |
| 4486 | 4486 | ||
| 4487 | * make/libtool.mk (install): Do not strip executables and shared | 4487 | * make/libtool.mk (install): Do not strip executables and shared |
| 4488 | - libraries during installation. Leave that up to the packager. | 4488 | + libraries during installation. Leave that up to the packager. |
| 4489 | 4489 | ||
| 4490 | * configure.ac: disable -Werror by default. | 4490 | * configure.ac: disable -Werror by default. |
| 4491 | 4491 | ||
| @@ -4568,7 +4568,7 @@ | @@ -4568,7 +4568,7 @@ | ||
| 4568 | * 2.2.0: release | 4568 | * 2.2.0: release |
| 4569 | 4569 | ||
| 4570 | * Rename README.windows to README-windows.txt and convert its line | 4570 | * Rename README.windows to README-windows.txt and convert its line |
| 4571 | - endings to Windows-style line endings. Also mention Jian Ma's VC6 | 4571 | + endings to Windows-style line endings. Also mention Jian Ma's VC6 |
| 4572 | port in the manual and README-windows.txt. | 4572 | port in the manual and README-windows.txt. |
| 4573 | 4573 | ||
| 4574 | 2010-08-09 Jay Berkenbilt <ejb@ql.org> | 4574 | 2010-08-09 Jay Berkenbilt <ejb@ql.org> |
| @@ -4687,7 +4687,7 @@ | @@ -4687,7 +4687,7 @@ | ||
| 4687 | 2009-10-19 Jay Berkenbilt <ejb@ql.org> | 4687 | 2009-10-19 Jay Berkenbilt <ejb@ql.org> |
| 4688 | 4688 | ||
| 4689 | * include/qpdf/QPDF.hh (QPDF): getWarnings now returns a list of | 4689 | * include/qpdf/QPDF.hh (QPDF): getWarnings now returns a list of |
| 4690 | - QPDFExc rather than a list of strings. This way, warnings may be | 4690 | + QPDFExc rather than a list of strings. This way, warnings may be |
| 4691 | inspected in more detail. | 4691 | inspected in more detail. |
| 4692 | 4692 | ||
| 4693 | * Include information about the last object read in most error | 4693 | * Include information about the last object read in most error |
| @@ -4732,13 +4732,13 @@ | @@ -4732,13 +4732,13 @@ | ||
| 4732 | 2009-09-27 Jay Berkenbilt <ejb@ql.org> | 4732 | 2009-09-27 Jay Berkenbilt <ejb@ql.org> |
| 4733 | 4733 | ||
| 4734 | * Add several methods to query permissions controlled by the | 4734 | * Add several methods to query permissions controlled by the |
| 4735 | - encryption dictionary. Note that qpdf does not enforce these | 4735 | + encryption dictionary. Note that qpdf does not enforce these |
| 4736 | permissions even though it allows the user to query them. | 4736 | permissions even though it allows the user to query them. |
| 4737 | 4737 | ||
| 4738 | * The function QPDF::getUserPassword returned the user password | 4738 | * The function QPDF::getUserPassword returned the user password |
| 4739 | with the required padding as specified by the PDF specification. | 4739 | with the required padding as specified by the PDF specification. |
| 4740 | - This is seldom useful to users. This function has been replaced | ||
| 4741 | - by QPDF::getPaddedUserPassword. Call the new | 4740 | + This is seldom useful to users. This function has been replaced |
| 4741 | + by QPDF::getPaddedUserPassword. Call the new | ||
| 4742 | QPDF::getTrimmedUserPassword to retrieve the user password in a | 4742 | QPDF::getTrimmedUserPassword to retrieve the user password in a |
| 4743 | human-readable format. | 4743 | human-readable format. |
| 4744 | 4744 | ||
| @@ -4765,7 +4765,7 @@ | @@ -4765,7 +4765,7 @@ | ||
| 4765 | 4765 | ||
| 4766 | * libqpdf/Pl_LZWDecoder.cc: adjust LZWDecoder full table | 4766 | * libqpdf/Pl_LZWDecoder.cc: adjust LZWDecoder full table |
| 4767 | detection, now having been able to adequately test boundary | 4767 | detection, now having been able to adequately test boundary |
| 4768 | - conditions both and with and without early code change. Also | 4768 | + conditions both and with and without early code change. Also |
| 4769 | compared implementation with other LZW decoders. | 4769 | compared implementation with other LZW decoders. |
| 4770 | 4770 | ||
| 4771 | 2009-03-08 Jay Berkenbilt <ejb@ql.org> | 4771 | 2009-03-08 Jay Berkenbilt <ejb@ql.org> |
| @@ -4868,7 +4868,7 @@ | @@ -4868,7 +4868,7 @@ | ||
| 4868 | 4868 | ||
| 4869 | * libqpdf/QPDF_encryption.cc: do not assume size_t is unsigned int | 4869 | * libqpdf/QPDF_encryption.cc: do not assume size_t is unsigned int |
| 4870 | 4870 | ||
| 4871 | - * qpdf/qtest/qpdf.test: removed locale-specific tests. These were | 4871 | + * qpdf/qtest/qpdf.test: removed locale-specific tests. These were |
| 4872 | really to check bugs in perl 5.8.0 and are obsolete now. They | 4872 | really to check bugs in perl 5.8.0 and are obsolete now. They |
| 4873 | also make the test suite fail in some environments that don't have | 4873 | also make the test suite fail in some environments that don't have |
| 4874 | all the locales fully configured. | 4874 | all the locales fully configured. |