Bug#1057270: libimager-perl: FTBFS: t/t10tiff.t failure

Niko Tyni ntyni at debian.org
Sat Dec 2 17:24:36 GMT 2023


(re-adding Cc: tiff at pdo)

On Sat, Dec 02, 2023 at 01:40:51PM +0100, gregor herrmann wrote:
> On Sat, 02 Dec 2023 14:24:01 +0200, Niko Tyni wrote:
> 
> > It regressed with tiff_4.5.1+git230720-2 which is currently blocked from
> > migrating to trixie because libimager-perl autopkgtests are failing too.
> > 
> > Changes:
> >  tiff (4.5.1+git230720-2) unstable; urgency=high
> >  .
> >    * Backport security fix for CVE-2023-6277, passing a crafted tiff file to
> >      TIFFOpen() API may allow a remote attacker to cause a denial of service
> >      (closes: #1056751).
> > 
> > I see libimager-perl upstream has released 1.021 with some tiff related
> > changes. I haven't checked if those fix the issue, or whether libtiff
> > is actually broken. Feel free to reassign as needed.
> 
> I've imported 1.021 into our git repo yesterday, and there it fails
> the same way (I hadn't nticed that 1.020 in sid also fails …)
> 
> So -- is this a bug in Imager or in tiff?

Can't quite say, but sharing what I found:

The test creates TIFF/testout/t106.tiff with
Imager::File::TIFF::i_writetiff_wiol() and then tries to read it back with

  open(FH,"testout/t106.tiff") or die "cannot open testout/t106.tiff\n";
  binmode(FH);
  $IO = Imager::io_new_fd(fileno(FH));
  my $cmpimg = Imager::File::TIFF::i_readtiff_wiol($IO);

Adding an Imager->_error_as_msg() call after that gives

  Error opening file: Failed to read directory at offset 37014 at TIFF/t/t10tiff.t line 49.

Also there's t106tiff.log with plenty of diagnostics including

  [2023/12/02 16:29:42]   imtiff.c:237     1: tiff warning Requested memory size for TIFF directory of 168 is greather than filesize 0. Memory not allocated, TIFF directory not read

which matches the CVE-2023-6277 changes in libtiff, see

  https://sources.debian.org/src/tiff/4.5.1%2Bgit230720-2/debian/patches/CVE-2023-6277.patch/

It can be reproduced like this with the libimager-perl binaries
currently in sid and every tiff file I tried with, for example
test/images/palette-1c-8b.tiff in src:tiff.

  https://sources.debian.org/src/tiff/4.5.1%2Bgit230720-2/test/images/palette-1c-8b.tiff/

  $ perl -MImager::File::TIFF -E '$i = Imager::io_new_fd(*STDIN); Imager::init_log(); Imager::File::TIFF::i_readtiff_wiol($i) or die Imager->_error_as_msg' < tiff/test/images/palette-1c-8b.tiff
  [2023/12/02 17:16:03]      log.c:56      0: Imager - log started (level = 1)
  [2023/12/02 17:16:03]  Imager.xs:267     1: Imager 1.020 starting
  [2023/12/02 17:16:03]   imtiff.c:700     1: i_readtiff_wiol(ig 0x55a6ece33890, allow_incomplete 0, page 0)
  [2023/12/02 17:16:03]       io.c:242     1: mymalloc(size 8192) -> 0x55a6ed426e70
  [2023/12/02 17:16:03]   imtiff.c:237     1: tiff warning Requested memory size for TIFF directory of 180 is greather than filesize 0. Memory not allocated, TIFF directory not read
  [2023/12/02 17:16:03]       io.c:266     1: myrealloc(block (nil), size 124)
  [2023/12/02 17:16:03]   imtiff.c:201     1: tiff error fmt Failed to read directory at offset %lu
  [2023/12/02 17:16:03]       io.c:242     1: mymalloc(size 41) -> 0x55a6ece1d480
  [2023/12/02 17:16:03]   imtiff.c:715     1: i_readtiff_wiol: Unable to open tif file
  [2023/12/02 17:16:03]       io.c:242     1: mymalloc(size 19) -> 0x55a6ed36be90
  [2023/12/02 17:16:03]       io.c:253     1: myfree(p 0x55a6ed42e250)
  Error opening file: Failed to read directory at offset 23716 at -e line 1.
  [2023/12/02 17:16:03]  iolayer.c:424     1: io_glue_DESTROY(ig 0x55a6ece33890)
 
I note it says "filesize 0". The patch determines the file size with

  uint64_t filesize = TIFFGetFileSize(tif);

and TIFFGetFileSize() is in src:tiff libtiff/tiffiop.h as follows:

  #define TIFFGetFileSize(tif) ((*(tif)->tif_sizeproc)((tif)->tif_clientdata))

which is where I called it a day :)

So I suppose the way Imager reads the file here does not initialize the
data structure in a way that the patched libtiff expects?
-- 
Niko



More information about the pkg-perl-maintainers mailing list