exiftool_vendored 12.56.0 → 12.57.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
29
29
  %jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
30
30
  %static_vars);
31
31
 
32
- $VERSION = '12.56';
32
+ $VERSION = '12.57';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -2043,6 +2043,7 @@ sub new
2043
2043
  $$self{DEL_GROUP} = { }; # lookup for groups to delete when writing
2044
2044
  $$self{SAVE_COUNT} = 0; # count calls to SaveNewValues()
2045
2045
  $$self{FILE_SEQUENCE} = 0; # sequence number for files when reading
2046
+ $$self{FILES_WRITTEN} = 0; # count of files successfully written
2046
2047
  $$self{INDENT2} = ''; # indentation of verbose messages from SetNewValue
2047
2048
 
2048
2049
  # initialize our new groups for writing
@@ -7988,7 +7989,7 @@ sub ProcessDirectory($$$;$)
7988
7989
  # patch for bug in Windows phone 7.5 O/S that writes incorrect InteropIFD pointer
7989
7990
  return 0 unless $dirName eq 'GPS' and $$self{PROCESSED}{$addr} eq 'InteropIFD';
7990
7991
  }
7991
- $$self{PROCESSED}{$addr} = $dirName;
7992
+ $$self{PROCESSED}{$addr} = $dirName unless $$tagTablePtr{VARS} and $$tagTablePtr{VARS}{ALLOW_REPROCESS};
7992
7993
  }
7993
7994
  my $oldOrder = GetByteOrder();
7994
7995
  my @save = @$self{'INDENT','DIR_NAME','Compression','SubfileType'};
@@ -8749,13 +8750,16 @@ sub ProcessBinaryData($$$)
8749
8750
  {
8750
8751
  my ($self, $dirInfo, $tagTablePtr) = @_;
8751
8752
  my $dataPt = $$dirInfo{DataPt};
8752
- my $offset = $$dirInfo{DirStart} || 0;
8753
- my $size = $$dirInfo{DirLen} || (length($$dataPt) - $offset);
8753
+ my $dataLen = length $$dataPt;
8754
+ my $dirStart = $$dirInfo{DirStart} || 0;
8755
+ my $maxLen = $dataLen - $dirStart;
8756
+ my $size = $$dirInfo{DirLen};
8754
8757
  my $base = $$dirInfo{Base} || 0;
8755
8758
  my $verbose = $$self{OPTIONS}{Verbose};
8756
8759
  my $unknown = $$self{OPTIONS}{Unknown};
8757
8760
  my $dataPos = $$dirInfo{DataPos} || 0;
8758
8761
 
8762
+ $size = $maxLen if not defined $size or $size > $maxLen;
8759
8763
  # get default format ('int8u' unless specified)
8760
8764
  my $defaultFormat = $$tagTablePtr{FORMAT} || 'int8u';
8761
8765
  my $increment = $formatSize{$defaultFormat};
@@ -8797,6 +8801,7 @@ sub ProcessBinaryData($$$)
8797
8801
  $tagInfo = $self->GetTagInfo($tagTablePtr, $index);
8798
8802
  unless ($tagInfo) {
8799
8803
  next unless defined $tagInfo;
8804
+ # $entry = offset of value relative to directory start (or end if negative)
8800
8805
  my $entry = int($index) * $increment + $varSize;
8801
8806
  if ($entry < 0) {
8802
8807
  $entry += $size;
@@ -8805,7 +8810,7 @@ sub ProcessBinaryData($$$)
8805
8810
  next if $entry >= $size;
8806
8811
  my $more = $size - $entry;
8807
8812
  $more = 128 if $more > 128;
8808
- my $v = substr($$dataPt, $entry+$offset, $more);
8813
+ my $v = substr($$dataPt, $entry+$dirStart, $more);
8809
8814
  $tagInfo = $self->GetTagInfo($tagTablePtr, $index, \$v);
8810
8815
  next unless $tagInfo;
8811
8816
  }
@@ -8838,7 +8843,7 @@ sub ProcessBinaryData($$$)
8838
8843
  $count = $more;
8839
8844
  } elsif ($format eq 'pstring') {
8840
8845
  $format = 'string';
8841
- $count = Get8u($dataPt, ($entry++)+$offset);
8846
+ $count = Get8u($dataPt, ($entry++)+$dirStart);
8842
8847
  --$more;
8843
8848
  } elsif (not $formatSize{$format}) {
8844
8849
  if ($format =~ /(.*)\[(.*)\]/) {
@@ -8867,17 +8872,17 @@ sub ProcessBinaryData($$$)
8867
8872
  } elsif ($format =~ /^var_/) {
8868
8873
  # handle variable-length string formats
8869
8874
  $format = substr($format, 4);
8870
- pos($$dataPt) = $entry + $offset;
8875
+ pos($$dataPt) = $entry + $dirStart;
8871
8876
  undef $count;
8872
8877
  if ($format eq 'ustring') {
8873
- $count = pos($$dataPt) - ($entry+$offset) if $$dataPt =~ /\G(..)*?\0\0/sg;
8878
+ $count = pos($$dataPt) - ($entry+$dirStart) if $$dataPt =~ /\G(..)*?\0\0/sg;
8874
8879
  $varSize -= 2; # ($count includes base size of 2 bytes)
8875
8880
  } elsif ($format eq 'pstring') {
8876
- $count = Get8u($dataPt, ($entry++)+$offset);
8881
+ $count = Get8u($dataPt, ($entry++)+$dirStart);
8877
8882
  --$more;
8878
8883
  } elsif ($format eq 'pstr32' or $format eq 'ustr32') {
8879
8884
  last if $more < 4;
8880
- $count = Get32u($dataPt, $entry + $offset);
8885
+ $count = Get32u($dataPt, $entry + $dirStart);
8881
8886
  $count *= 2 if $format eq 'ustr32';
8882
8887
  $entry += 4;
8883
8888
  $more -= 4;
@@ -8885,22 +8890,22 @@ sub ProcessBinaryData($$$)
8885
8890
  } elsif ($format eq 'int16u') {
8886
8891
  # int16u size of binary data to follow
8887
8892
  last if $more < 2;
8888
- $count = Get16u($dataPt, $entry + $offset) + 2;
8893
+ $count = Get16u($dataPt, $entry + $dirStart) + 2;
8889
8894
  $varSize -= 2; # ($count includes size word)
8890
8895
  $format = 'undef';
8891
8896
  } elsif ($format eq 'ue7') {
8892
8897
  require Image::ExifTool::BPG;
8893
- ($val, $count) = Image::ExifTool::BPG::Get_ue7($dataPt, $entry + $offset);
8898
+ ($val, $count) = Image::ExifTool::BPG::Get_ue7($dataPt, $entry + $dirStart);
8894
8899
  last unless defined $val;
8895
8900
  --$varSize; # ($count includes base size of 1 byte)
8896
8901
  } elsif ($$dataPt =~ /\0/g) {
8897
- $count = pos($$dataPt) - ($entry+$offset);
8902
+ $count = pos($$dataPt) - ($entry+$dirStart);
8898
8903
  --$varSize; # ($count includes base size of 1 byte)
8899
8904
  }
8900
8905
  $count = $more if not defined $count or $count > $more;
8901
8906
  $varSize += $count; # shift subsequent indices
8902
8907
  unless (defined $val) {
8903
- $val = substr($$dataPt, $entry+$offset, $count);
8908
+ $val = substr($$dataPt, $entry+$dirStart, $count);
8904
8909
  $val = $self->Decode($val, 'UCS2') if $format eq 'ustring' or $format eq 'ustr32';
8905
8910
  $val =~ s/\0.*//s unless $format eq 'undef'; # truncate at null
8906
8911
  }
@@ -8914,7 +8919,7 @@ sub ProcessBinaryData($$$)
8914
8919
  # hook to allow format, etc to be set dynamically
8915
8920
  if (defined $$tagInfo{Hook}) {
8916
8921
  my $oldVarSize = $varSize;
8917
- my $pos = $entry + $offset;
8922
+ my $pos = $entry + $dirStart;
8918
8923
  #### eval Hook ($format, $varSize, $size, $dataPt, $pos)
8919
8924
  eval $$tagInfo{Hook};
8920
8925
  # save variable size data if required for writing (in case changed by Hook)
@@ -8939,7 +8944,7 @@ sub ProcessBinaryData($$$)
8939
8944
  next if $$tagInfo{LargeTag} and $$self{EXCL_TAG_LOOKUP}{lc $$tagInfo{Name}};
8940
8945
  # read value now if necessary
8941
8946
  unless (defined $val and not $$tagInfo{SubDirectory}) {
8942
- $val = ReadValue($dataPt, $entry+$offset, $format, $count, $more, \$rational);
8947
+ $val = ReadValue($dataPt, $entry+$dirStart, $format, $count, $more, \$rational);
8943
8948
  next unless defined $val;
8944
8949
  $mask = $$tagInfo{Mask};
8945
8950
  $val = ($val & $mask) >> $$tagInfo{BitShift} if $mask;
@@ -8956,8 +8961,8 @@ sub ProcessBinaryData($$$)
8956
8961
  Value => $val,
8957
8962
  DataPt => $dataPt,
8958
8963
  Size => $len,
8959
- Start => $entry+$offset,
8960
- Addr => $entry+$offset+$base+$dataPos,
8964
+ Start => $entry+$dirStart,
8965
+ Addr => $entry+$dirStart+$base+$dataPos,
8961
8966
  Format => $format,
8962
8967
  Count => $count,
8963
8968
  Extra => $mask ? sprintf(', mask 0x%.2x',$mask) : undef,
@@ -8983,16 +8988,27 @@ sub ProcessBinaryData($$$)
8983
8988
  my $subdirBase = $base;
8984
8989
  if (defined $$subdir{Base}) {
8985
8990
  #### eval Base ($start,$base)
8986
- my $start = $entry + $offset + $dataPos;
8991
+ my $start = $entry + $dirStart + $dataPos;
8987
8992
  $subdirBase = eval($$subdir{Base}) + $base;
8988
8993
  }
8989
8994
  my $start = $$subdir{Start} || 0;
8995
+ if ($start =~ /\$/) {
8996
+ # ignore directories with a zero offset (ie. missing Nikon ShotInfo entries)
8997
+ next unless $val;
8998
+ #### eval Start ($val, $dirStart)
8999
+ $start = eval($start);
9000
+ next if $start < $dirStart or $start > $dataLen;
9001
+ $len = $$subdir{DirLen};
9002
+ $len = $dataLen - $start unless $len and $len <= $dataLen - $start;
9003
+ } else {
9004
+ $start += $dirStart + $entry;
9005
+ }
8990
9006
  my %subdirInfo = (
8991
9007
  DataPt => $dataPt,
8992
9008
  DataPos => $dataPos,
8993
- DataLen => length $$dataPt,
8994
- DirStart => $entry + $offset + $start,
8995
- DirLen => $len - $start,
9009
+ DataLen => $dataLen,
9010
+ DirStart => $start,
9011
+ DirLen => $len,
8996
9012
  Base => $subdirBase,
8997
9013
  );
8998
9014
  delete $$self{NO_UNKNOWN};
@@ -2327,9 +2327,9 @@ CBOR, CIFF, CameraIFD, Canon, CanonCustom, CanonDR4, CanonRaw, CanonVRD,
2327
2327
  Casio, Chapter#, Composite, DICOM, DJI, DNG, DV, DjVu, DjVu-Meta, Ducky,
2328
2328
  EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
2329
2329
  FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GPS,
2330
- GSpherical, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC, HTML,
2331
- HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv, ICC-chrm,
2332
- ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile,
2330
+ GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
2331
+ HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
2332
+ ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile,
2333
2333
  ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1,
2334
2334
  IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList, JFIF, JFXX,
2335
2335
  JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys, Kodak,
@@ -2349,7 +2349,7 @@ RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP,
2349
2349
  Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2,
2350
2350
  SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw,
2351
2351
  Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent, Track#, UserData,
2352
- VCalendar, VCard, Version0, VNote, Vorbis, WTV, XML, XMP, XMP-DICOM,
2352
+ VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP, XMP-DICOM,
2353
2353
  XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GCreations, XMP-GDepth, XMP-GFocus,
2354
2354
  XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1,
2355
2355
  XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi, XMP-ast,
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.56
3
+ Version: 12.57
4
4
  Release: 1
5
5
  License: Artistic/GPL
6
6
  Group: Development/Libraries/Perl
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ExiftoolVendored
4
- VERSION = Gem::Version.new('12.56.0')
4
+ VERSION = Gem::Version.new('12.57.0')
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: exiftool_vendored
3
3
  version: !ruby/object:Gem::Version
4
- version: 12.56.0
4
+ version: 12.57.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matthew McEachen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-02-09 00:00:00.000000000 Z
12
+ date: 2023-02-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool