Commit 0ae19c375ebc24c303765953ff127ecb6a4664dc

Authored by Jay Berkenbilt
1 parent 1e0b1025

TODO: Remove fixed item, move item into ABI section

Showing 1 changed file with 12 additions and 39 deletions
@@ -16,6 +16,18 @@ Comments appear in the code prefixed by "ABI" @@ -16,6 +16,18 @@ Comments appear in the code prefixed by "ABI"
16 * QPDFPageObjectHelper::placeFormXObject: name should be std::string 16 * QPDFPageObjectHelper::placeFormXObject: name should be std::string
17 const& (issue #374) 17 const& (issue #374)
18 18
  19 +* (Source compatibiliy) As somewhat discussed in issue 219, the
  20 + original pipeStreamData in QPDF_Stream has various logic for
  21 + reporting warnings and letting the caller retry. This logic is not
  22 + implemented for stream data providers. When copying foreign streams,
  23 + qpdf uses a stream data provider (QPDF::CopiedStreamDataProvider) to
  24 + read the stream data from the original file. While a warning is
  25 + issued for that case, there is no way to actually propagate failure
  26 + information back through because
  27 + StreamDataProvider::provideStreamData doesn't take the
  28 + suppress_warnings or will_retry options, and adding them would break
  29 + source compatibility.
  30 +
19 C++-11 31 C++-11
20 ====== 32 ======
21 33
@@ -392,45 +404,6 @@ I find it useful to make reference to them in this list @@ -392,45 +404,6 @@ I find it useful to make reference to them in this list
392 logic error and what could happen because of malformed user input. 404 logic error and what could happen because of malformed user input.
393 See also ../misc/linearization-errors. 405 See also ../misc/linearization-errors.
394 406
395 - * There are a few known limitations of copying foreign streams. These  
396 - are somewhat discussed in github issue 219. They are most likely  
397 - not worth fixing.  
398 -  
399 - * The original pipeStreamData in QPDF_Stream has various logic for  
400 - reporting warnings and letting the caller retry. This logic is  
401 - not implemented for stream data providers. When copying foreign  
402 - streams, qpdf uses a stream data provider  
403 - (QPDF::CopiedStreamDataProvider) to read the stream data from the  
404 - original file. While a warning is issued for that case, there is  
405 - no way to actually propagate failure information back through  
406 - because StreamDataProvider::provideStreamData doesn't take the  
407 - suppress_warnings or will_retry options, and adding them would  
408 - break source compatibility.  
409 -  
410 - * When copying streams that use StreamDataProvider provider, the  
411 - original QPDF object must still be kept around. This is the case  
412 - of where QPDF q1 has a stream for which replaceStreamData was  
413 - called to provide a StreamDataProvider, and then that stream from  
414 - q1 was subsequently copied to q2. In that case, q1 must be kept  
415 - around until q2 is written. That is a pretty unusual case as,  
416 - most of the time, people could just attach the stream data  
417 - provider directly to the q2. That said, it actually appears in  
418 - qpdf itself. qpdf allows you to combine the --pages and --split  
419 - options. In that case, a merged file, which uses  
420 - StreamDataProvider to access the original stream, is subsequently  
421 - copied to the final split output files. Solving this restriction  
422 - is difficult and would probably require breaking source  
423 - compatibility because QPDF_Stream doesn't have enough information  
424 - to know whether the original QPDF object is needed by the  
425 - stream's data provider. Also, the interface is designed to pass  
426 - the object ID and generation of the object whose data is being  
427 - provided so the provider can use it for lookup or any other  
428 - purpose. As such, copying a stream data provider to a new stream  
429 - potentially changes the meaning of the parameters passed to the  
430 - provider. This happens with CopiedStreamDataProvider, which uses  
431 - the object ID and generation of the new stream to locate the  
432 - parameters of the old stream.  
433 -  
434 * If I ever decide to make appearance stream-generation aware of 407 * If I ever decide to make appearance stream-generation aware of
435 fonts or font metrics, see email from Tobias with Message-ID 408 fonts or font metrics, see email from Tobias with Message-ID
436 <5C3C9C6C.8000102@thax.hardliners.org> dated 2019-01-14. 409 <5C3C9C6C.8000102@thax.hardliners.org> dated 2019-01-14.