Changeset 52872


Ignore:
Timestamp:
Jun 25, 2009, 12:28:22 AM (10 years ago)
Author:
ricci@…
Message:

replace files/patch-lib-CAM-PDF.pm with new patchfile (old one was effectively

incorporated upstream and was no longer use) - new patchfile fixes problems
if there are objects in the PDF with xref of 0.

bump revision

Location:
trunk/dports/perl/p5-cam-pdf
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/dports/perl/p5-cam-pdf/Portfile

    r50684 r52872  
    44PortGroup                       perl5 1.0
    55version                         1.52
    6 revision                        0
     6revision                        1
    77perl5.setup                     CAM-PDF ${version}
    88maintainers                     ricci
     
    1515platforms                 darwin
    1616
    17 ## patchfiles                   patch-lib-CAM-PDF.pm
     17patchfiles                      patch-lib-CAM-PDF.pm
    1818
    1919checksums           md5     ab4914a3f07dd2d8cc23f2cdee8f7ce3 \
  • trunk/dports/perl/p5-cam-pdf/files/patch-lib-CAM-PDF.pm

    r36407 r52872  
    1 --- lib/CAM/PDF.pm.orig 2007-11-28 21:42:46.000000000 -0800
    2 +++ lib/CAM/PDF.pm      2008-03-27 20:06:54.000000000 -0700
    3 @@ -566,6 +566,9 @@
    4              $CAM::PDF::errstr = "Could not decipher xref row:\n" . $self->trimstr($row);
    5              return;
    6           }
    7 +               if ((0 == $1) && (0 == $2)) {
    8 +                       next;
    9 +               }
    10           if ($type eq 'n')
    11           {
    12              $index->{$objnum} = $indexnum;
    13 @@ -3785,6 +3788,7 @@
    14     my $otherdoc = shift;
    15     my $otherkey = shift;
    16     my $follow = shift;
    17 +   my %traversedNodes = ();
     1--- lib/CAM/PDF.pm      2008-10-02 21:31:43.000000000 -0700
     2+++ lib/CAM/PDF.pm      2009-06-24 16:59:11.000000000 -0700
     3@@ -1019,7 +1019,7 @@
    184 
    19     # careful! 'undef' means something different from '0' here!
    20     if (!defined $follow)
    21 @@ -3838,10 +3842,10 @@
    22           my $newkey = $self->appendObject($otherdoc, $oldrefkey, 0);
    23           $newrefkeys{$oldrefkey} = $newkey;
    24        }
    25 -      $self->changeRefKeys($objnode, \%newrefkeys);
    26 +      $self->changeRefKeys($objnode, \%newrefkeys, \%traversedNodes);
    27        for my $newkey (values %newrefkeys)
     5    if (${$c} !~ m/ \G(\d+)\s+(\d+)\s+obj\s* /cgxms) ##no critic(ProhibitUnusedCapture)
     6    {
     7-      die "Expected object open tag\n" . $self->trimstr(${$c});
     8+      die "Expected object open tag, got:  \"" . $self->trimstr(${$c} . "\"");
     9    }
     10    # need to implement like this with explicit capture vars for 5.6.1
     11    # compatibility
     12@@ -1699,8 +1699,9 @@
     13       #print "Filling cache for obj \#$key...\n";
     14 
     15       my $pos = $self->{xref}->{$key};
     16+      my $posAsInt = int($pos);
     17 
     18-      if (!$pos)
     19+      if (!$posAsInt)
    2820       {
    29 -         $self->changeRefKeys($self->dereference($newkey), \%newrefkeys);
    30 +         $self->changeRefKeys($self->dereference($newkey), \%newrefkeys, \%traversedNodes);
    31        }
     21          warn "Bad request for object $key at position 0 in the file\n";
     22          return;
     23@@ -4834,9 +4835,20 @@
     24 
     25    # Turn off Linearization, if set
     26    my $first;
     27+   my $firstObjPos = undef;
     28    if (exists $self->{order})
     29    {
     30-      $first = $self->{order}->[0];
     31+      my $iterator = 0;
     32+      my $iteratorMAX = $#{$self->{order}};
     33+      ## find the first object at a non-zero position:
     34+      do {
     35+         $first = $self->{order}->[$iterator];
     36+         $firstObjPos = int($self->{xref}->{$first});
     37+         $iterator++;
     38+      } while (!$firstObjPos && $iterator < $iteratorMAX);
     39+      if (!$firstObjPos) {
     40+         die "ERROR: Failed to find first object with non-zero position";
     41+      }
    3242    }
    33     return (%newrefkeys);
    34 @@ -5040,7 +5044,7 @@
    35     if ($stream)
     43    else
    3644    {
    37        $stream = $self->{crypt}->encrypt($self, $stream, $objnode->{objnum}, $objnode->{gennum});
    38 -      $str .= "\nstream\n" . $stream . 'endstream';
    39 +      $str .= "\nstream\n" . $stream . '\nendstream';
     45@@ -4844,6 +4856,7 @@
     46       ($first) = sort {$x->{$a} <=> $x->{$b}} grep {!ref $x->{$_}} keys %{$x};
    4047    }
    41     return "obj\n$str\nendobj\n";
     48 
     49+
     50    my $objnode = $self->dereference($first);
     51    if ($objnode->{value}->{type} eq 'dictionary')
     52    {
     53@@ -5159,6 +5172,12 @@
     54 {
     55    my $self = shift;
     56    my $objnum = shift;
     57+   my $objref = $self->dereference($objnum);
     58+
     59+   if ((!defined($objref)) || (!ref $objref)) {
     60+      warn "WARN:  Failed to get object reference for object number $objnum, not writing it out...\n";
     61+      return "";
     62+   }
     63 
     64    return "$objnum 0 " . $self->writeAny($self->dereference($objnum));
    4265 }
    43 @@ -5072,6 +5076,7 @@
    44     my $objnode = shift;
    45     my $func = shift;
    46     my $funcdata = shift;
    47 +   my $funcResult = undef;
    48  
    49     my $traversed = {};
    50     my @stack = ($objnode);
    51 @@ -5080,7 +5085,8 @@
    52     while ($i < @stack)
    53     {
    54        my $objnode = $stack[$i++];
    55 -      $self->$func($objnode, $funcdata);
    56 +      $funcResult = undef;
    57 +      $funcResult = $self->$func($objnode, $funcdata);
    58  
    59        my $type = $objnode->{type};
    60        my $val = $objnode->{value};
    61 @@ -5108,6 +5114,62 @@
    62     return;
    63  }
    64  
    65 +sub recurseTraverse {
    66 +       my ($self, $deref, $objnode, $traversedRef, $func, $funcdata, $objnum) = @_;
    67 +       
    68 +       my $type;
    69 +       my $val;
    70 +       my @nodes = ();
    71 +       my $node = undef;
    72 +       my $newObjNum = undef;
    73 +       
    74 +       if ((!defined($objnode)) || (! ref $objnode )) {
    75 +               return;
    76 +       }
    77 +       
    78 +       if (defined($objnum)) {
    79 +               $newObjNum = $objnum;
    80 +       }
    81 +
    82 +       $type = $objnode->{type};
    83 +       $val = $objnode->{value};
    84 +       
    85 +       if (exists $objnode->{objnum}) {
    86 +               $newObjNum = $objnode->{objnum};
    87 +       }
    88 +       
    89 +       if ((defined($newObjNum)) &&
    90 +           (exists ($traversedRef->{$newObjNum}))) {
    91 +               return;
    92 +       } else {
    93 +               $self->$func($objnode, $funcdata);
    94 +       }
    95 +       
    96 +       if ($type eq 'dictionary') {
    97 +               push (@nodes, values %{$val});
    98 +       } elsif ($type eq 'array') {
    99 +               push (@nodes, @{$val});
    100 +       } elsif ($type eq 'object') {
    101 +               push (@nodes, $val);
    102 +       } elsif ($type eq 'reference') {
    103 +               if ($deref) {
    104 +                       push (@nodes, $self->dereference($val));
    105 +               } else {
    106 +                       return;
    107 +               }
    108 +       }
    109 +
    110 +       for $node (@nodes) {
    111 +               recurseTraverse($self, $deref, $node, $traversedRef, $func, $funcdata, $newObjNum);
    112 +       }
    113 +       
    114 +       if (($type eq 'object')) {
    115 +               $traversedRef->{$newObjNum} = 1;
    116 +       }
    117 +
    118 +       return;
    119 +}
    120 +
    121  # decodeObject and decodeAll differ from each other like this:
    122  #
    123  #  decodeObject JUST decodes a single stream directly below the object
    124 @@ -5538,10 +5600,11 @@
    125     my $self = shift;
    126     my $objnode = shift;
    127     my $newrefkeys = shift;
    128 +   my $traversedRef = shift;
    129  
    130     my $follow = shift || 0;   # almost always false
    131  
    132 -   $self->traverse($follow, $objnode, \&_changeRefKeysCB, $newrefkeys);
    133 +   $self->recurseTraverse($follow, $objnode, $traversedRef, \&_changeRefKeysCB, $newrefkeys, 0);
    134     return;
    135  }
    136  
    137 @@ -5558,9 +5621,10 @@
    138        if (exists $newrefkeys->{$objnode->{value}})
    139        {
    140           $objnode->{value} = $newrefkeys->{$objnode->{value}};
    141 +         return 1;
    142        }
    143     }
    144 -   return;
    145 +   return 0;
    146  }
    147  
    148  =item $doc->abbrevInlineImage($object)
Note: See TracChangeset for help on using the changeset viewer.