exiftool_vendored 11.69.0 → 11.70.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of exiftool_vendored might be problematic. Click here for more details.

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