exiftool_vendored 11.69.0 → 11.70.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ea39081a30f1851114ef9949045a7650418f1347
4
- data.tar.gz: 3c8964dbcd6b93e20c44f009dace3dac33555658
3
+ metadata.gz: 99342b0e056690256fd202039dbf7b678e57e74f
4
+ data.tar.gz: abc9d3a16667124e8920041f816acc514d004b1f
5
5
  SHA512:
6
- metadata.gz: '0941ec0ddebab6a0b9690d46a752e831c9ded4923dd86f7a13cb001f2deb41a6ae9c96c8c9ad1cad187aad08f7208a3a70d741bd31f9ba1a9d80e68247b91e80'
7
- data.tar.gz: fcc84333736485e86b37961b89fa9ab9e8368f2517f36f0f1b36242c0e5faf9ef4eb029b03ea78a50378dafc8b93f0f47b98cd81237f978c233cd0c938f2054b
6
+ metadata.gz: 4cedd4a547029020891081d81be3a9e0356f06fad6bca85df5e0a799ef9eba06e0ea48345e921c066b8c1e74bc1caf7fff084e95da64f2deb23210ee4a29ccf3
7
+ data.tar.gz: 591846ec033b7e216d05037ee6c503d291e55b67c36255c48c4b32d2835475ef15c12c3dbc328ec9a9f9ce3b10207d8ed4b4c42e3e3d90e955385fc47ba165e1
data/bin/Changes CHANGED
@@ -4,13 +4,28 @@ ExifTool Version History
4
4
 
5
5
  RSS feed: http://owl.phy.queensu.ca/~phil/exiftool/rss.xml
6
6
 
7
- Note: The most recent production release is Version 11.50. (Other versions are
7
+ Note: The most recent production release is Version 11.70. (Other versions are
8
8
  considered development releases, and are not uploaded to CPAN.)
9
9
 
10
+ Oct. 10, 2019 - Version 11.70 (production release)
11
+
12
+ - Added a new CanonModelID (thanks Laurent Clevy)
13
+ - Improved identification of Office Open XML files
14
+ - Removed RAF version check when writing FujiFilm RAF files
15
+ - Limited the number of accelerometer records that ExifTool will read by
16
+ default with the -ee option from INSV files to avoid excessive processing
17
+ times and memory usage
18
+ - Patched Windows version to allow reading of shared files with Unicode names
19
+ (thanks Eriksson)
20
+ - Patched to avoid converting some bad GPS coordinates (thanks Csaba Toth)
21
+ - Fixed verbose output to include YCbCrSubSampling for JPEG files
22
+ - Fixed conversion and group names for the new FujiFilm tag added in 11.68
23
+ - Fixed format of GeoTiffDirectory and GeoTiffDoubleParams when writing
24
+
10
25
  Oct. 2, 2019 - Version 11.69
11
26
 
12
- - Fixed bug where signed coordinates between -1 and 0 were written as positive
13
- values when writing QuickTime:GPSCoordinates
27
+ - Fixed bug introduced in version 11.66 where the sign was lost when writing
28
+ coordinate values between 0 and -1 to QuickTime:GPSCoordinates
14
29
 
15
30
  Oct. 1, 2019 - Version 11.68
16
31
 
@@ -18,7 +33,7 @@ Oct. 1, 2019 - Version 11.68
18
33
  - Added a number of new FujiFlashMode values
19
34
  - Decode a new FujiFilm tag
20
35
  - Made NikonCaptureOffsets and NikonCaptureVersion deletable
21
- - Enhanced tag name documentation to indicate deletable makernote tags
36
+ - Enhanced tag name documentation to indicate deletable MakerNotes tags
22
37
 
23
38
  Sept. 30, 2019 - Version 11.67
24
39
 
data/bin/META.json CHANGED
@@ -47,6 +47,6 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "11.69",
50
+ "version" : "11.70",
51
51
  "x_serialization_backend" : "JSON::PP version 4.02"
52
52
  }
data/bin/META.yml CHANGED
@@ -28,5 +28,5 @@ recommends:
28
28
  Time::HiRes: '0'
29
29
  requires:
30
30
  perl: '5.004'
31
- version: '11.69'
31
+ version: '11.70'
32
32
  x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
data/bin/README CHANGED
@@ -104,8 +104,8 @@ your home directory, then you would type the following commands in a
104
104
  terminal window to extract and run ExifTool:
105
105
 
106
106
  cd ~/Desktop
107
- gzip -dc Image-ExifTool-11.69.tar.gz | tar -xf -
108
- cd Image-ExifTool-11.69
107
+ gzip -dc Image-ExifTool-11.70.tar.gz | tar -xf -
108
+ cd Image-ExifTool-11.70
109
109
  ./exiftool t/images/ExifTool.jpg
110
110
 
111
111
  Note: These commands extract meta information from one of the test images.
data/bin/exiftool CHANGED
@@ -10,7 +10,7 @@
10
10
  use strict;
11
11
  require 5.004;
12
12
 
13
- my $version = '11.69';
13
+ my $version = '11.70';
14
14
 
15
15
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
16
16
  my $exeDir;
@@ -5173,7 +5173,7 @@ with this command:
5173
5173
 
5174
5174
  produces output like this:
5175
5175
 
5176
- -- Generated by ExifTool 11.69 --
5176
+ -- Generated by ExifTool 11.70 --
5177
5177
  File: a.jpg - 2003:10:31 15:44:19
5178
5178
  (f/5.6, 1/60s, ISO 100)
5179
5179
  File: b.jpg - 2006:05:23 11:57:38
@@ -27,7 +27,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
27
27
  %mimeType $swapBytes $swapWords $currentByteOrder %unpackStd
28
28
  %jpegMarker %specialTags %fileTypeLookup);
29
29
 
30
- $VERSION = '11.69';
30
+ $VERSION = '11.70';
31
31
  $RELEASE = '';
32
32
  @ISA = qw(Exporter);
33
33
  %EXPORT_TAGS = (
@@ -434,6 +434,8 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
434
434
  POT => ['FPX', 'Microsoft PowerPoint Template'],
435
435
  POTM => [['ZIP','FPX'], 'Office Open XML Presentation Template Macro-enabled'],
436
436
  POTX => [['ZIP','FPX'], 'Office Open XML Presentation Template'],
437
+ PPAM => [['ZIP','FPX'], 'Office Open XML Presentation Addin Macro-enabled'],
438
+ PPAX => [['ZIP','FPX'], 'Office Open XML Presentation Addin'],
437
439
  PPM => ['PPM', 'Portable Pixel Map'],
438
440
  PPS => ['FPX', 'Microsoft PowerPoint Slideshow'],
439
441
  PPSM => [['ZIP','FPX'], 'Office Open XML Presentation Slideshow Macro-enabled'],
@@ -683,6 +685,8 @@ my %fileDescription = (
683
685
  POT => 'application/vnd.ms-powerpoint',
684
686
  POTM => 'application/vnd.ms-powerpoint.template.macroEnabled',
685
687
  POTX => 'application/vnd.openxmlformats-officedocument.presentationml.template',
688
+ PPAM => 'application/vnd.ms-powerpoint.addin.macroEnabled',
689
+ PPAX => 'application/vnd.openxmlformats-officedocument.presentationml.addin', # (NC, PH invented)
686
690
  PPM => 'image/x-portable-pixmap',
687
691
  PPS => 'application/vnd.ms-powerpoint',
688
692
  PPSM => 'application/vnd.ms-powerpoint.slideshow.macroEnabled',
@@ -3882,7 +3886,11 @@ sub Open($*$;$)
3882
3886
  $create = Win32API::File::OPEN_EXISTING();
3883
3887
  }
3884
3888
  }
3885
- my $wh = eval { Win32API::File::CreateFileW($file, $access, 0, [], $create, 0, []) };
3889
+ my $share = 0;
3890
+ eval {
3891
+ $share = Win32API::File::FILE_SHARE_READ() unless $access & Win32API::File::GENERIC_WRITE();
3892
+ };
3893
+ my $wh = eval { Win32API::File::CreateFileW($file, $access, $share, [], $create, 0, []) };
3886
3894
  return undef unless $wh;
3887
3895
  my $fd = eval { Win32API::File::OsFHandleOpenFd($wh, 0) };
3888
3896
  if (not defined $fd or $fd < 0) {
@@ -3910,7 +3918,8 @@ sub Exists($$)
3910
3918
  if ($self->EncodeFileName($file)) {
3911
3919
  local $SIG{'__WARN__'} = \&SetWarning;
3912
3920
  my $wh = eval { Win32API::File::CreateFileW($file,
3913
- Win32API::File::GENERIC_READ(), 0, [],
3921
+ Win32API::File::GENERIC_READ(),
3922
+ Win32API::File::FILE_SHARE_READ(), [],
3914
3923
  Win32API::File::OPEN_EXISTING(), 0, []) };
3915
3924
  return 0 unless $wh;
3916
3925
  eval { Win32API::File::CloseHandle($wh) };
@@ -6037,7 +6046,7 @@ sub ProcessJPEG($$)
6037
6046
  }
6038
6047
  if ($hmin and $vmin) {
6039
6048
  my ($hs, $vs) = ($hmax / $hmin, $vmax / $vmin);
6040
- $self->FoundTag($$sof{YCbCrSubSampling}, "$hs $vs");
6049
+ $self->HandleTag($sof, 'YCbCrSubSampling', "$hs $vs");
6041
6050
  }
6042
6051
  next;
6043
6052
  } elsif ($marker == 0xd9) { # EOI
@@ -35,7 +35,7 @@ use Image::ExifTool::Sony;
35
35
  use Image::ExifTool::Validate;
36
36
  use Image::ExifTool::MacOS;
37
37
 
38
- $VERSION = '3.29';
38
+ $VERSION = '3.30';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -2560,6 +2560,7 @@ sub WriteTagNames($$)
2560
2560
  my ($smallNote, @values);
2561
2561
  foreach (@$values) {
2562
2562
  if (/^\(/) {
2563
+ $_ = Doc2Html($_);
2563
2564
  # set the note font
2564
2565
  $smallNote = 1 if $numTags < 2;
2565
2566
  push @values, ($smallNote ? $noteFontSmall : $noteFont) . "$_</span>";
@@ -2570,6 +2571,7 @@ sub WriteTagNames($$)
2570
2571
  if (s/^\[!HTML\]//) {
2571
2572
  push @values, $_;
2572
2573
  } else {
2574
+ $_ = Doc2Html($_);
2573
2575
  push @values, "<span class=s>$_</span>";
2574
2576
  }
2575
2577
  next;
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.25';
91
+ $VERSION = '4.26';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -814,6 +814,7 @@ $VERSION = '4.25';
814
814
  0x805 => 'PowerShot SX70 HS',
815
815
  0x808 => 'PowerShot G7 X Mark III',
816
816
  0x811 => 'EOS M6 Mark II', #IB
817
+ 0x812 => 'EOS M200', #25
817
818
 
818
819
  # (see http://cweb.canon.jp/e-support/faq/answer/digitalcamera/10447-1.html for PowerShot/IXUS/IXY names)
819
820
 
@@ -2185,6 +2186,7 @@ my %offOn = ( 0 => 'Off', 1 => 'On' );
2185
2186
  61 => 'Smooth Skin', #51
2186
2187
  62 => 'Soft Focus', #PH (SX260,IXUS240)
2187
2188
  68 => 'Food', #PH (250D)
2189
+ # 83 - seen for EOS M200 (ref PH)
2188
2190
  84 => 'HDR Art Standard', #PH (80D)
2189
2191
  85 => 'HDR Art Vivid', #PH (80D)
2190
2192
  93 => 'HDR Art Bold', #PH (80D)
@@ -7890,7 +7892,7 @@ my %ciMaxFocal = (
7890
7892
  16 => '16 (M50)',
7891
7893
  17 => '17 (EOS R)', # (and PowerShot SX740HS)
7892
7894
  18 => '18 (EOS RP)', # (and PowerShot SX70HS)
7893
- 19 => '19 (90D/M6mkII)',# (and PowerShot G7XmkIII)
7895
+ 19 => '19 (90D/M6mkII/M200)',# (and PowerShot G7XmkIII)
7894
7896
  },
7895
7897
  },
7896
7898
  0x47 => { Name => 'WB_RGGBLevelsAsShot', Format => 'int16s[4]' },
@@ -683,7 +683,7 @@ sub ProcessCanonRaw($$$)
683
683
  my ($value, $delRawConv);
684
684
  if ($valueInDir) { # is the value data in the directory?
685
685
  # this type of tag stores the value in the 'size' and 'ptr' fields
686
- $valueDataPos = $dirOffset + $pt + 4;
686
+ $valueDataPos = $dirOffset + $pt + 4; # (remember, +2 for the entry count)
687
687
  $size = 8;
688
688
  $value = substr($buff, $pt+2, $size);
689
689
  # set count to 1 by default for normal values in directory
@@ -56,7 +56,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
56
56
  use Image::ExifTool qw(:DataAccess :Utils);
57
57
  use Image::ExifTool::MakerNotes;
58
58
 
59
- $VERSION = '4.23';
59
+ $VERSION = '4.24';
60
60
 
61
61
  sub ProcessExif($$$);
62
62
  sub WriteExif($$$);
@@ -1810,14 +1810,14 @@ my %sampleFormat = (
1810
1810
  0x87af => { #30
1811
1811
  Name => 'GeoTiffDirectory',
1812
1812
  Format => 'undef',
1813
- Binary => 1,
1813
+ Writable => 'int16u',
1814
1814
  Notes => q{
1815
1815
  these "GeoTiff" tags may read and written as a block, but they aren't
1816
1816
  extracted unless specifically requested. Byte order changes are handled
1817
1817
  automatically when copying between TIFF images with different byte order
1818
1818
  },
1819
- Writable => 'undef',
1820
1819
  WriteGroup => 'IFD0',
1820
+ Binary => 1,
1821
1821
  RawConv => '$val . GetByteOrder()', # save byte order
1822
1822
  # swap byte order if necessary
1823
1823
  RawConvInv => q{
@@ -1832,9 +1832,9 @@ my %sampleFormat = (
1832
1832
  0x87b0 => { #30
1833
1833
  Name => 'GeoTiffDoubleParams',
1834
1834
  Format => 'undef',
1835
- Binary => 1,
1836
- Writable => 'undef',
1835
+ Writable => 'double',
1837
1836
  WriteGroup => 'IFD0',
1837
+ Binary => 1,
1838
1838
  RawConv => '$val . GetByteOrder()', # save byte order
1839
1839
  # swap byte order if necessary
1840
1840
  RawConvInv => q{
@@ -1849,6 +1849,7 @@ my %sampleFormat = (
1849
1849
  },
1850
1850
  0x87b1 => { #30
1851
1851
  Name => 'GeoTiffAsciiParams',
1852
+ Format => 'undef',
1852
1853
  Writable => 'string',
1853
1854
  WriteGroup => 'IFD0',
1854
1855
  Binary => 1,
@@ -31,12 +31,13 @@ use vars qw($VERSION);
31
31
  use Image::ExifTool qw(:DataAccess :Utils);
32
32
  use Image::ExifTool::Exif;
33
33
 
34
- $VERSION = '1.74';
34
+ $VERSION = '1.75';
35
35
 
36
36
  sub ProcessFujiDir($$$);
37
37
  sub ProcessFaceRec($$$);
38
38
 
39
39
  # the following RAF version numbers have been tested for writing:
40
+ # (as of ExifTool 11.70, this lookup is no longer used if the version number is numerical)
40
41
  my %testedRAF = (
41
42
  '0100' => 'E550, E900, F770, S5600, S6000fd, S6500fd, HS10/HS11, HS30, S200EXR, X100, XF1, X-Pro1, X-S1, XQ2 Ver1.00, X-T100, GFX 50R, XF10',
42
43
  '0101' => 'X-E1, X20 Ver1.01, X-T3',
@@ -776,10 +777,11 @@ my %faceCategories = (
776
777
  Writable => 'int16u',
777
778
  Groups => { 2 => 'Video' },
778
779
  },
779
- 0x3824 => { #forum10480 (X-T3)
780
+ 0x3824 => { #forum10480 (X series)
780
781
  Name => 'FullHDHighSpeedRec',
781
782
  Writable => 'int32u',
782
- Groups => { 1 => 'Off', 2 => 'On' },
783
+ Groups => { 2 => 'Video' },
784
+ PrintConv => { 1 => 'Off', 2 => 'On' },
783
785
  },
784
786
  0x4005 => { #forum9634
785
787
  Name => 'FaceElementSelected', # (could be face or eye)
@@ -1467,9 +1469,10 @@ sub WriteRAF($$)
1467
1469
  return 1;
1468
1470
  }
1469
1471
  # check to make sure this version of RAF has been tested
1470
- unless ($testedRAF{$ver}) {
1471
- $et->Warn("RAF version $ver not yet tested", 1);
1472
- }
1472
+ #(removed in ExifTool 11.70)
1473
+ #unless ($testedRAF{$ver}) {
1474
+ # $et->Warn("RAF version $ver not yet tested", 1);
1475
+ #}
1473
1476
  # read the embedded JPEG
1474
1477
  unless ($raf->Seek($jpos, 0) and $raf->Read($jpeg, $jlen) == $jlen) {
1475
1478
  $et->Error('Error reading RAF meta information');
@@ -12,7 +12,7 @@ use strict;
12
12
  use vars qw($VERSION);
13
13
  use Image::ExifTool::Exif;
14
14
 
15
- $VERSION = '1.50';
15
+ $VERSION = '1.51';
16
16
 
17
17
  my %coordConv = (
18
18
  ValueConv => 'Image::ExifTool::GPS::ToDegrees($val)',
@@ -534,6 +534,7 @@ sub ToDMS($$;$$)
534
534
  sub ToDegrees($;$)
535
535
  {
536
536
  my ($val, $doSign) = @_;
537
+ return '' if $val =~ /\b(inf|undef)\b/; # ignore invalid values
537
538
  # extract decimal or floating point values out of any other garbage
538
539
  my ($d, $m, $s) = ($val =~ /((?:[+-]?)(?=\d|\.\d)\d*(?:\.\d*)?(?:[Ee][+-]\d+)?)/g);
539
540
  return '' unless defined $d;
@@ -160,6 +160,10 @@ my $debug; # set to 1 to enable debugging code
160
160
  Start => '$valuePtr',
161
161
  Base => 0, # (avoids warnings since maker notes are not self-contained)
162
162
  },
163
+ # 0x0011 - sensor code (ref IB)
164
+ # 0x0012 - camera model id?
165
+ # 0x0015 - camera model name
166
+ # 0x0016 - coating code (ref IB)
163
167
  },
164
168
  # (the GE X5 has really messed up EXIF-like maker notes starting with
165
169
  # "GENIC\x0c\0" --> currently not decoded)
@@ -2284,6 +2284,7 @@ my %binaryDataAttrs = (
2284
2284
  Name => 'NikonCaptureVersion',
2285
2285
  Writable => 'string',
2286
2286
  Permanent => 0,
2287
+ PrintConv => undef, # (avoid applying default print conversion to string)
2287
2288
  },
2288
2289
  # 0x0e0e is in D70 Nikon Capture files (not out-of-the-camera D70 files) - PH
2289
2290
  0x0e0e => { #PH
@@ -3840,6 +3841,8 @@ my %binaryDataAttrs = (
3840
3841
  %Image::ExifTool::Nikon::CaptureOffsets = (
3841
3842
  PROCESS_PROC => \&ProcessNikonCaptureOffsets,
3842
3843
  GROUPS => { 0 => 'MakerNotes', 2 => 'Camera' },
3844
+ # (note that these are duplicates of offsets in the normal TIFF structure,
3845
+ # and that these offsets are not updated when ExifTool rewrites the file)
3843
3846
  1 => 'IFD0_Offset',
3844
3847
  2 => 'PreviewIFD_Offset',
3845
3848
  3 => 'SubIFD_Offset',
@@ -14,13 +14,14 @@ use Image::ExifTool qw(:DataAccess :Utils);
14
14
  use Image::ExifTool::XMP;
15
15
  use Image::ExifTool::ZIP;
16
16
 
17
- $VERSION = '1.07';
17
+ $VERSION = '1.08';
18
18
 
19
19
  # test for recognized OOXML document extensions
20
20
  my %isOOXML = (
21
21
  DOCX => 1, DOCM => 1,
22
22
  DOTX => 1, DOTM => 1,
23
23
  POTX => 1, POTM => 1,
24
+ PPAX => 1, PPAM => 1,
24
25
  PPSX => 1, PPSM => 1,
25
26
  PPTX => 1, PPTM => 1, THMX => 1,
26
27
  XLAM => 1,
@@ -70,9 +70,15 @@ my %processByMetaFormat = (
70
70
 
71
71
  # data lengths for each INSV record type
72
72
  my %insvDataLen = (
73
- 0x300 => 56,
74
- 0x400 => 16,
75
- 0x700 => 53,
73
+ 0x300 => 56, # accelerometer
74
+ 0x400 => 16, # unknown
75
+ 0x700 => 53, # GPS
76
+ );
77
+
78
+ # limit the default amount of data we read for some record types
79
+ # (to avoid running out of memory)
80
+ my %insvLimit = (
81
+ 0x300 => [ 'accelerometer', 20000 ], # maximum of 20000 accelerometer records
76
82
  );
77
83
 
78
84
  # tags extracted from various QuickTime data streams
@@ -1392,7 +1398,7 @@ sub Process_mebx($$$)
1392
1398
  }
1393
1399
 
1394
1400
  #------------------------------------------------------------------------------
1395
- # Process QuickTime '3gf' timed metadata (Pittasoft Blackvue dashcam)
1401
+ # Process QuickTime '3gf' timed metadata (ref PH, Pittasoft Blackvue dashcam)
1396
1402
  # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
1397
1403
  # Returns: 1 on success
1398
1404
  sub Process_3gf($$$)
@@ -1652,7 +1658,7 @@ sub ProcessTTAD($$$)
1652
1658
  }
1653
1659
 
1654
1660
  #------------------------------------------------------------------------------
1655
- # Extract information from Insta360 trailer
1661
+ # Extract information from Insta360 trailer (ref PH)
1656
1662
  # Inputs: 0) ExifTool ref
1657
1663
  sub ProcessINSVTrailer($)
1658
1664
  {
@@ -1667,23 +1673,29 @@ sub ProcessINSVTrailer($)
1667
1673
  my $tagTbl = GetTagTable('Image::ExifTool::QuickTime::Stream');
1668
1674
  my $fileEnd = $raf->Tell();
1669
1675
  my $trailerLen = unpack('x38V', $buff);
1670
- my $trailerStart = $fileEnd - $trailerLen;
1676
+ $trailerLen > $fileEnd and $et->Warn('Bad INSV trailer size'), return;
1671
1677
  my $unknown = $et->Options('Unknown');
1672
1678
  my $verbose = $et->Options('Verbose');
1673
- my $pos = $fileEnd - 78;
1679
+ my $epos = -78; # position relative to EOF (avoids using large offsets for files > 2 GB)
1674
1680
  my ($i, $p);
1675
1681
  SetByteOrder('II');
1676
1682
  # loop through all records in the trailer, from last to first
1677
1683
  for (;;) {
1678
1684
  my ($id, $len) = unpack('vV', $buff);
1679
- ($pos -= $len) < $trailerStart and last;
1680
- $raf->Seek($pos, 0) or last;
1681
- $raf->Read($buff, $len) == $len or last;
1685
+ ($epos -= $len) + $trailerLen < 0 and last;
1686
+ $raf->Seek($epos, 2) or last;
1687
+ my $dlen = $insvDataLen{$id};
1682
1688
  if ($verbose) {
1683
- $et->VPrint(0, sprintf("INSV Record 0x%x (offset 0x%x, %d bytes):\n", $id, $pos, $len));
1684
- $et->VerboseDump(\$buff);
1689
+ $et->VPrint(0, sprintf("INSV Record 0x%x (offset 0x%x, %d bytes):\n", $id, $fileEnd + $epos, $len));
1685
1690
  }
1686
- my $dlen = $insvDataLen{$id};
1691
+ # limit the number of records we read if necessary
1692
+ if ($insvLimit{$id} and $len > $insvLimit{$id}[1] * $dlen and
1693
+ $et->Warn("INSV $insvLimit{$id}[0] data is huge. Processing only the first $insvLimit{$id}[1] records",2))
1694
+ {
1695
+ $len = $insvLimit{$id}[1] * $dlen;
1696
+ }
1697
+ $raf->Read($buff, $len) == $len or last;
1698
+ $et->VerboseDump(\$buff) if $verbose > 2;
1687
1699
  if ($dlen) {
1688
1700
  $len % $dlen and $et->Warn(sprintf('Unexpected INSV record 0x%x length',$id)), last;
1689
1701
  if ($id == 0x300) {
@@ -1719,7 +1731,7 @@ sub ProcessINSVTrailer($)
1719
1731
  $et->HandleTag($tagTbl, GPSTrack => $a[9]);
1720
1732
  $et->HandleTag($tagTbl, GPSTrackRef => 'T');
1721
1733
  $et->HandleTag($tagTbl, GPSAltitude => $a[10]);
1722
- $et->HandleTag($tagTbl, Unknown02 => "@a[1,2]");
1734
+ $et->HandleTag($tagTbl, Unknown02 => "@a[1,2]") if $unknown;
1723
1735
  }
1724
1736
  }
1725
1737
  } elsif ($id == 0x101) {
@@ -1733,8 +1745,8 @@ sub ProcessINSVTrailer($)
1733
1745
  $p += 2 + $n;
1734
1746
  }
1735
1747
  }
1736
- ($pos -= 6) < $trailerStart and last; # step back to previous record
1737
- $raf->Seek($pos, 0) or last;
1748
+ ($epos -= 6) + $trailerLen < 0 and last; # step back to previous record
1749
+ $raf->Seek($epos, 2) or last;
1738
1750
  $raf->Read($buff, 6) == 6 or last;
1739
1751
  }
1740
1752
  SetByteOrder('MM');
@@ -545,8 +545,8 @@ official EXIF 2.32 specification.
545
545
  0x8781 SharedData - no
546
546
  0x8782 T88Options - no
547
547
  0x87ac ImageLayer - no
548
- 0x87af GeoTiffDirectory IFD0 undef
549
- 0x87b0 GeoTiffDoubleParams IFD0 undef
548
+ 0x87af GeoTiffDirectory IFD0 int16u[0.5]
549
+ 0x87b0 GeoTiffDoubleParams IFD0 double[0.125]
550
550
  0x87b1 GeoTiffAsciiParams IFD0 string
551
551
  0x87be JBIGOptions - no
552
552
  0x8822 ExposureProgram ExifIFD int16u
@@ -19,7 +19,7 @@ use strict;
19
19
  use vars qw($VERSION $warnString);
20
20
  use Image::ExifTool qw(:DataAccess :Utils);
21
21
 
22
- $VERSION = '1.25';
22
+ $VERSION = '1.26';
23
23
 
24
24
  sub WarnProc($) { $warnString = $_[0]; }
25
25
 
@@ -456,7 +456,14 @@ sub ProcessZIP($$)
456
456
  my $cType = $zip->memberNamed('[Content_Types].xml');
457
457
  if ($cType) {
458
458
  ($buff, $status) = $zip->contents($cType);
459
- if (not $status and $buff =~ /ContentType\s*=\s*(['"])([^"']+)\.main(\+xml)?\1/) {
459
+ if (not $status and (
460
+ # first look for the main document with the expected name
461
+ $buff =~ m{\sPartName\s*=\s*['"](?:/ppt/presentation.xml|/word/document.xml|/xl/workbook.xml)['"][^>]*\sContentType\s*=\s*(['"])([^"']+)\.main(\+xml)?\1} or
462
+ # then look for the main part
463
+ $buff =~ /<Override[^>]*\sPartName[^<]+\sContentType\s*=\s*(['"])([^"']+)\.main(\+xml)?\1/ or
464
+ # and if all else fails, use the default main
465
+ $buff =~ /ContentType\s*=\s*(['"])([^"']+)\.main(\+xml)?\1/))
466
+ {
460
467
  $mime = $2;
461
468
  }
462
469
  }
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 11.69
3
+ Version: 11.70
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('11.69.0')
4
+ VERSION = Gem::Version.new('11.70.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: 11.69.0
4
+ version: 11.70.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: 2019-10-02 00:00:00.000000000 Z
12
+ date: 2019-10-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool