tags 622078 patch
thanks

The following patches fix
1. The bug itself
2. The warnings (which turned out to be nothing to do with the bug)
From 3fada157720f71e1ef8585ddecd2306de24bd0ce Mon Sep 17 00:00:00 2001
From: Jeffrey Ratcliffe <jeffrey.ratcli...@gmail.com>
Date: Tue, 4 Oct 2016 20:47:41 +0200
Subject: [PATCH 1/2] Fix LZW decoding problems from Debian bug #622078

---
 lib/PDF/API2/Resource/XObject/Image/TIFF.pm | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/lib/PDF/API2/Resource/XObject/Image/TIFF.pm b/lib/PDF/API2/Resource/XObject/Image/TIFF.pm
index 8de298d..154006e 100644
--- a/lib/PDF/API2/Resource/XObject/Image/TIFF.pm
+++ b/lib/PDF/API2/Resource/XObject/Image/TIFF.pm
@@ -186,6 +186,10 @@ sub handle_lzw
 {
     my ($self,$pdf,$tif)=@_;
     $self->filters('FlateDecode');
+    my $imageWidth = $tif->{imageWidth};
+    my $mod = $imageWidth % 8;
+    if ($mod > 0) {$imageWidth += 8 - $mod}
+    my $max_raw_strip = $imageWidth*$tif->{bitsPerSample}*$tif->{RowsPerStrip}/8;
 
     if(ref($tif->{imageOffset})) {
         $self->{' stream'}='';
@@ -196,6 +200,9 @@ sub handle_lzw
             $tif->{fh}->seek(shift @{$tif->{imageOffset}},0);
             $tif->{fh}->read($buf,shift @{$tif->{imageLength}});
             $buf=deLZW(9,$buf);
+            if (length($buf) > $max_raw_strip) {
+                $buf = substr($buf, 0, $max_raw_strip)
+            }
             $self->{' stream'}.=$buf;
         }
     } 
@@ -560,6 +567,9 @@ sub readTags {
       } elsif($valTag==277) {
         # samples per pixel
         $self->{samplesPerPixel}=$valOffset;
+      } elsif($valTag==278) {
+        # RowsPerStrip
+        $self->{RowsPerStrip}=$valOffset;
       } elsif($valTag==279) {
         # image data length/strip lengths
         if($valCount==1) {
-- 
2.4.4

From 15d142b167312cf5fa52eda2dcd0a39aa58fc747 Mon Sep 17 00:00:00 2001
From: Jeffrey Ratcliffe <jeffrey.ratcli...@gmail.com>
Date: Tue, 4 Oct 2016 20:49:09 +0200
Subject: [PATCH 2/2] Fix IO::Handle warnings from Debian bug #622078

---
 lib/PDF/API2/Resource/XObject/Image/TIFF.pm | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/lib/PDF/API2/Resource/XObject/Image/TIFF.pm b/lib/PDF/API2/Resource/XObject/Image/TIFF.pm
index 154006e..b79a3b4 100644
--- a/lib/PDF/API2/Resource/XObject/Image/TIFF.pm
+++ b/lib/PDF/API2/Resource/XObject/Image/TIFF.pm
@@ -372,6 +372,7 @@ sub new {
   $fh->seek( $self->{offset}, 0 );
 
   # checking byte order of data
+  $self->{byteOrder} = undef; # suppress warning from IO::Handle
   $fh->read( $self->{byteOrder}, 2 );
   $self->{byte}='C';
   $self->{short}=(($self->{byteOrder} eq 'MM') ? 'n' : 'v' );
@@ -379,11 +380,13 @@ sub new {
   $self->{rational}=(($self->{byteOrder} eq 'MM') ? 'NN' : 'VV' );;
 
   # get/check version id
+  $self->{version} = undef; # suppress warning from IO::Handle
   $fh->read( $self->{version}, 2 );
   $self->{version}=unpack($self->{short},$self->{version});
   die "Wrong TIFF Id '$self->{version}' (should be 42)." if($self->{version} != 42);
 
   # get the offset to the first tag directory.
+  $self->{ifdOffset} = undef; # suppress warning from IO::Handle
   $fh->read( $self->{ifdOffset}, 4 );
   $self->{ifdOffset}=unpack($self->{long},$self->{ifdOffset});
 
@@ -457,6 +460,7 @@ sub readTags {
 
   while($self->{ifd} > 0) {
     $fh->seek( $self->{ifd}, 0 );
+    $self->{ifdNum} = undef; # suppress warning from IO::Handle
     $fh->read( $self->{ifdNum}, 2 );
     $self->{ifdNum}=unpack($self->{short},$self->{ifdNum});
     $self->{bitsPerSample}=1;
@@ -531,12 +535,14 @@ sub readTags {
         # ImageDescription
         my $here=$fh->tell;
         $fh->seek($valOffset,0);
+        $self->{imageDescription} = undef; # suppress warning from IO::Handle
         $fh->read($self->{imageDescription},$valLen);
         $fh->seek($here,0);
       } elsif($valTag==282) {
         # xRes
         my $here=$fh->tell;
         $fh->seek($valOffset,0);
+        $self->{xRes} = undef; # suppress warning from IO::Handle
         $fh->read($self->{xRes},$valLen);
         $fh->seek($here,0);
         $self->{xRes}=[unpack($self->{rational},$self->{xRes})];
@@ -545,6 +551,7 @@ sub readTags {
         # yRes
         my $here=$fh->tell;
         $fh->seek($valOffset,0);
+        $self->{yRes} = undef; # suppress warning from IO::Handle
         $fh->read($self->{yRes},$valLen);
         $fh->seek($here,0);
         $self->{yRes}=[unpack($self->{rational},$self->{yRes})];
@@ -598,6 +605,7 @@ sub readTags {
         # imageID
         my $here=$fh->tell;
         $fh->seek($valOffset,0);
+        $self->{imageId} = undef; # suppress warning from IO::Handle
         $fh->read($self->{imageId},$valLen);
         $fh->seek($here,0);
 #      } elsif($valTag==) {
-- 
2.4.4

Reply via email to