exiftool_vendored 11.51.0 → 11.52.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: 14d2ae1044ed8d62a0b4efcae5b775fb16db5f4c
4
- data.tar.gz: 9ff9933b519b5ad645b675891ea048cf077b0d36
3
+ metadata.gz: 708b8f54e7785c774043632d9e5dcefe98ae0a8d
4
+ data.tar.gz: 1d0693dcecc6c821a9ae9aab22427cd42d63ea8a
5
5
  SHA512:
6
- metadata.gz: a246e28c731ee0349cbf2782052eba51249f4df03dc623046f65250b258bed7179c3c179cb1dd64eddb0965f2518a2631c7cb492339ee54184cf66bd6df46542
7
- data.tar.gz: 923d024c05145f18099dfc1f8cf6bbd6ccb4cd839ccd7d7af2ff3497298f8aba17ee110adb9e1787ffd1c801b93e656b73d065efaa413c0a8db37b16231608a0
6
+ metadata.gz: 457d788e530ab3b621d414c6ad4c23bac4427b584886f5667cb1b3865dcd6ec77897a944a6b7ff5820e03e955826f37bd42c80269a75f30f47481ff5aec27ec4
7
+ data.tar.gz: dc5b34c896e756158c04c3ceb286746fe813fd2b0a1f37aca9faa517df5ce4706c53fc38e514647ed845d1bdbf519d2d2618087e8dcb6b84084ff0c82eba4e9e
data/bin/Changes CHANGED
@@ -7,6 +7,15 @@ RSS feed: http://owl.phy.queensu.ca/~phil/exiftool/rss.xml
7
7
  Note: The most recent production release is Version 11.50. (Other versions are
8
8
  considered development releases, and are not uploaded to CPAN.)
9
9
 
10
+ June 17, 2019 - Version 11.52
11
+
12
+ - Added a few new Nikon CropHiSpeed values (thanks Hayo Baan)
13
+ - Added a couple of new Nikon LensID's
14
+ - Fixed problem where processing large, corrupt AIFF files may could take an
15
+ excessively long time
16
+ - API Changes:
17
+ - Enhanced Compact option to add levels 3, 4 and 5
18
+
10
19
  June 13, 2019 - Version 11.51
11
20
 
12
21
  - Decode Canon DistortionCorrection tags
data/bin/META.json CHANGED
@@ -47,6 +47,6 @@
47
47
  }
48
48
  },
49
49
  "release_status" : "stable",
50
- "version" : "11.51",
50
+ "version" : "11.52",
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.51'
31
+ version: '11.52'
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.51.tar.gz | tar -xf -
108
- cd Image-ExifTool-11.51
107
+ gzip -dc Image-ExifTool-11.52.tar.gz | tar -xf -
108
+ cd Image-ExifTool-11.52
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
@@ -12,7 +12,7 @@
12
12
  use strict;
13
13
  require 5.004;
14
14
 
15
- my $version = '11.51';
15
+ my $version = '11.52';
16
16
 
17
17
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
18
18
  my $exeDir;
@@ -5119,7 +5119,7 @@ with this command:
5119
5119
 
5120
5120
  produces output like this:
5121
5121
 
5122
- -- Generated by ExifTool 11.51 --
5122
+ -- Generated by ExifTool 11.52 --
5123
5123
  File: a.jpg - 2003:10:31 15:44:19
5124
5124
  (f/5.6, 1/60s, ISO 100)
5125
5125
  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.51';
30
+ $VERSION = '11.52';
31
31
  $RELEASE = '';
32
32
  @ISA = qw(Exporter);
33
33
  %EXPORT_TAGS = (
@@ -2167,6 +2167,7 @@ sub ClearOptions($)
2167
2167
  WriteMode => 'wcg', # enable all write modes by default
2168
2168
  XAttrTags => undef, # extract MacOS extended attribute tags
2169
2169
  XMPAutoConv => 1, # automatic conversion of unknown XMP tag values
2170
+ XMPShorthand=> 0, # short form XMP
2170
2171
  };
2171
2172
  # keep necessary member variables in sync with options
2172
2173
  delete $$self{CUR_LANG};
@@ -529,12 +529,15 @@ without recoding. Default is 0.
529
529
 
530
530
  =item Compact
531
531
 
532
- Option to write compact XMP output. The XMP specification suggests that the
533
- data be padded with blanks to allow in-place editing. With this flag set to
534
- 1, the 2 kB of padding is not written. Note that this only effects embedded
535
- XMP since padding is never written for stand-alone XMP files. When set to
536
- 2, spaces to indent XMP for readability are also dropped. Default is undef.
537
- Also see the XMPShorthand option for reducing the size of XMP.
532
+ Option to write compact XMP output. The XMP specification recommends that
533
+ the XMP packet be padded with 2 kB of blanks to allow in-place editing. With
534
+ this option set to 1, the padding is not written. Note that this effects
535
+ only embedded XMP since padding is never written for stand-alone XMP files.
536
+ When set to 2, spaces to indent XMP for readability are also dropped. A
537
+ setting of 3 places all tags in a single rdf:Description element, and 4
538
+ removes newlines from between XMP elements. A setting of 5 also writes XMP
539
+ in shorthand format (to save setting the XMPShorthand option separately).
540
+ Default is undef.
538
541
 
539
542
  =item Composite
540
543
 
@@ -18,7 +18,7 @@ use vars qw($VERSION);
18
18
  use Image::ExifTool qw(:DataAccess :Utils);
19
19
  use Image::ExifTool::ID3;
20
20
 
21
- $VERSION = '1.09';
21
+ $VERSION = '1.10';
22
22
 
23
23
  # information for time/date-based tags (time zero is Jan 1, 1904)
24
24
  my %timeInfo = (
@@ -185,7 +185,7 @@ sub ProcessAIFF($$)
185
185
  {
186
186
  my ($et, $dirInfo) = @_;
187
187
  my $raf = $$dirInfo{RAF};
188
- my ($buff, $err, $tagTablePtr, $page, $type);
188
+ my ($buff, $err, $tagTablePtr, $page, $type, $n);
189
189
 
190
190
  # verify this is a valid AIFF file
191
191
  return 0 unless $raf->Read($buff, 12) == 12;
@@ -217,14 +217,24 @@ sub ProcessAIFF($$)
217
217
  #
218
218
  # Read through the IFF chunks
219
219
  #
220
- for (;;) {
220
+ for ($n=0;;++$n) {
221
221
  $raf->Read($buff, 8) == 8 or last;
222
222
  $pos += 8;
223
223
  my ($tag, $len) = unpack('a4N', $buff);
224
224
  my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
225
- $et->VPrint(0, "AIFF '${tag}' chunk ($len bytes of data):\n");
225
+ $et->VPrint(0, "AIFF '${tag}' chunk ($len bytes of data): ", $raf->Tell(),"\n");
226
226
  # AIFF chunks are padded to an even number of bytes
227
227
  my $len2 = $len + ($len & 0x01);
228
+ if ($len2 > 100000000) {
229
+ if ($len2 >= 0x80000000 and not $et->Options('LargeFileSupport')) {
230
+ $et->Warn('End of processing at large chunk (LargeFileSupport not enabled)');
231
+ last;
232
+ }
233
+ if ($tagInfo) {
234
+ $et->Warn("Skipping large $$tagInfo{Name} chunk (> 100 MB)");
235
+ undef $tagInfo;
236
+ }
237
+ }
228
238
  if ($tagInfo) {
229
239
  if ($$tagInfo{TypeOnly}) {
230
240
  $len = $len2 = 4;
@@ -241,6 +251,10 @@ sub ProcessAIFF($$)
241
251
  Start => 0,
242
252
  Size => $len,
243
253
  );
254
+ } elsif (not $len) {
255
+ next if ++$n < 100;
256
+ $et->Warn('Aborting scan. Too many empty chunks');
257
+ last;
244
258
  } elsif ($verbose > 2 and $len2 < 1024000) {
245
259
  $raf->Read($buff, $len2) == $len2 or $err = 1, last;
246
260
  $et->VerboseDump(\$buff);
@@ -248,6 +262,7 @@ sub ProcessAIFF($$)
248
262
  $raf->Seek($len2, 1) or $err=1, last;
249
263
  }
250
264
  $pos += $len2;
265
+ $n = 0;
251
266
  }
252
267
  $err and $et->Warn("Error reading $type file (corrupted?)");
253
268
  return 1;
@@ -798,7 +798,7 @@ sub ProcessMKV($$)
798
798
  # just skip unknown and large data blocks
799
799
  if (not $tagInfo or $more > 10000000) {
800
800
  # don't try to skip very large blocks unless LargeFileSupport is enabled
801
- last if $more > 0x80000000 and not $et->Options('LargeFileSupport');
801
+ last if $more >= 0x80000000 and not $et->Options('LargeFileSupport');
802
802
  $raf->Seek($more, 1) or last;
803
803
  $buff = '';
804
804
  $dataPos += $dataLen + $more;
@@ -46,6 +46,7 @@
46
46
  # 32) Stefan http://u88.n24.queensu.ca/exiftool/forum/index.php/topic,4494.0.html
47
47
  # 34) Stewart Bennett private communication (D4S, D810)
48
48
  # 35) David Puschel private communication
49
+ # 36) Hayo Baann (forum10207)
49
50
  # IB) Iliah Borg private communication (LibRaw)
50
51
  # JD) Jens Duttke private communication
51
52
  # NJ) Niels Kristian Bech Jensen private communication
@@ -59,7 +60,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
59
60
  use Image::ExifTool::Exif;
60
61
  use Image::ExifTool::GPS;
61
62
 
62
- $VERSION = '3.64';
63
+ $VERSION = '3.65';
63
64
 
64
65
  sub LensIDConv($$$);
65
66
  sub ProcessNikonAVI($$$);
@@ -514,6 +515,7 @@ sub GetAFPointGrid($$;$);
514
515
  'E8 4C 44 44 14 14 DF 0E' => 'Tamron SP 35mm f/1.8 Di VC USD (F012)', #35
515
516
  'E7 4C 4C 4C 14 14 DF 0E' => 'Tamron SP 45mm f/1.8 Di VC USD (F013)',
516
517
  'F4 54 56 56 18 18 84 06' => 'Tamron SP AF 60mm f/2.0 Di II Macro 1:1 (G005)', #24
518
+ 'E5 4C 62 62 14 14 C9 4E' => 'Tamron SP 85mm f/1.8 Di VC USD (F016)', #30
517
519
  '1E 5D 64 64 20 20 13 00' => 'Tamron SP AF 90mm f/2.5 (52E)',
518
520
  '20 5A 64 64 20 20 14 00' => 'Tamron SP AF 90mm f/2.5 Macro (152E)',
519
521
  '22 53 64 64 24 24 E0 02' => 'Tamron SP AF 90mm f/2.8 Macro 1:1 (72E)',
@@ -572,6 +574,7 @@ sub GetAFPointGrid($$;$);
572
574
  'F7 53 5C 80 24 24 84 06' => 'Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)',
573
575
  'FE 53 5C 80 24 24 84 06' => 'Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)',
574
576
  'F7 53 5C 80 24 24 40 06' => 'Tamron SP AF 70-200mm f/2.8 Di LD (IF) Macro (A001)',
577
+ 'E2 47 5C 80 24 24 DF 4E' => 'Tamron SP 70-200mm f/2.8 Di VC USD G2 (A025)', #30
575
578
  # 'FE 54 5C 80 24 24 DF 0E' => 'Tamron SP AF 70-200mm f/2.8 Di VC USD (A009)',
576
579
  'FE 54 5C 80 24 24 DF 0E' => 'Tamron SP 70-200mm f/2.8 Di VC USD (A009)', #NJ
577
580
  'E2 47 5C 80 24 24 DF 4E' => 'Tamron SP 70-200mm f/2.8 Di VC USD G2 (A025)', #forum9549
@@ -938,13 +941,16 @@ my %afPoints153 = (
938
941
  my %cropHiSpeed = ( #IB
939
942
  0 => 'Off',
940
943
  1 => '1.3x Crop', # (1.3x Crop, Large)
941
- 2 => 'DX Crop',
944
+ 2 => 'DX Crop', # (1.5x)
942
945
  3 => '5:4 Crop',
943
- 4 => '3:2 Crop',
946
+ 4 => '3:2 Crop', # (1.2x, ref 36)
944
947
  6 => '16:9 Crop',
948
+ 8 => '2.7x Crop', #36 (D4/D500)
945
949
  9 => 'DX Movie Crop', # (DX during movie recording, Large)
950
+ 10 => '1.3x Movie Crop', #36 (D4/D500)
946
951
  11 => 'FX Uncropped',
947
952
  12 => 'DX Uncropped',
953
+ 15 => '1.5x Movie Crop', #36 (D4/D500)
948
954
  17 => '1:1 Crop',
949
955
  OTHER => sub {
950
956
  my ($val, $inv, $conv) = @_;
@@ -604,13 +604,13 @@ sub LimitXMPSize($$$$$$)
604
604
  push @$startPt, length($$dataPt); # add end offset to list
605
605
  my $newData = substr($$dataPt, 0, $$startPt[0]);
606
606
  my $guid = '0' x 32;
607
- my $sp = $noPad ? '' : ' ';
607
+ my ($sp, $nl) = $noPad ? ('', $noPad > 1 ? '' : "\n") : (' ',"\n");
608
608
  # write the required xmpNote:HasExtendedXMP property
609
- $newData .= "\n$sp<$rdfDesc rdf:about='${about}'\n$sp${sp}xmlns:xmpNote='$nsURI{xmpNote}'";
610
- if ($et->Options('XMPShorthand')) {
609
+ $newData .= "$nl$sp<$rdfDesc rdf:about='${about}'\n$sp${sp}xmlns:xmpNote='$nsURI{xmpNote}'";
610
+ if ($$et{OPTIONS}{XMPShorthand} or ($$et{OPTIONS}{Compact} and $$et{OPTIONS}{Compact} > 4)) {
611
611
  $newData .= "\n$sp${sp}xmpNote:HasExtendedXMP='${guid}'/>\n";
612
612
  } else {
613
- $newData .= ">\n$sp$sp<xmpNote:HasExtendedXMP>$guid</xmpNote:HasExtendedXMP>\n$sp</$rdfDesc>\n";
613
+ $newData .= ">$nl$sp$sp<xmpNote:HasExtendedXMP>$guid</xmpNote:HasExtendedXMP>$nl$sp</$rdfDesc>\n";
614
614
  }
615
615
 
616
616
  my ($i, %descSize, $start);
@@ -652,42 +652,49 @@ sub CloseProperty($$$$)
652
652
 
653
653
  my $prop = pop @$curPropList;
654
654
  $prop =~ s/ .*//; # remove list index if it exists
655
- my $pad = $noPad ? '' : ' ' x (scalar(@$curPropList) + 1);
655
+ my ($pad, $nl);
656
+ if ($noPad) {
657
+ $pad = '';
658
+ $nl = $noPad > 1 ? '' : "\n";
659
+ } else {
660
+ $pad = ' ' x (scalar(@$curPropList) + 1);
661
+ $nl = "\n";
662
+ }
656
663
  if ($$resFlag[@$curPropList]) {
657
664
  # close this XMP structure with possible shorthand properties
658
665
  if (length $$short[-1]) {
659
666
  if (length $$long[-1]) {
660
667
  # require a new Description if both longhand and shorthand properties
661
- $$long[-2] .= ">\n$pad<$rdfDesc";
662
- $$short[-1] .= ">\n";
663
- $$long[-1] .= "$pad</$rdfDesc>\n";
668
+ $$long[-2] .= ">$pad<$rdfDesc";
669
+ $$short[-1] .= ">$nl";
670
+ $$long[-1] .= "$pad</$rdfDesc>$nl";
664
671
  } else {
665
672
  # simply close empty property if all shorthand
666
- $$short[-1] .= "/>\n";
673
+ $$short[-1] .= "/>$nl";
667
674
  }
668
675
  } else {
669
676
  # use "parseType" instead of opening a new Description
670
677
  $$long[-2] .= ' rdf:parseType="Resource"';
671
- $$short[-1] = length $$long[-1] ? ">\n" : "/>\n";
678
+ $$short[-1] = length $$long[-1] ? ">$nl" : "/>$nl";
672
679
  }
673
- $$long[-1] .= "$pad</$prop>\n" if length $$long[-1];
680
+ $$long[-1] .= "$pad</$prop>$nl" if length $$long[-1];
674
681
  $$long[-2] .= $$short[-1] . $$long[-1];
675
682
  pop @$short;
676
683
  pop @$long;
677
684
  } elsif (defined $$resFlag[@$curPropList]) {
678
685
  # close this top level Description with possible shorthand values
679
686
  if (length $$long[-1]) {
680
- $$long[-2] .= $$short[-1] . ">\n" . $$long[-1] . "$pad</$prop>\n";
687
+ $$long[-2] .= $$short[-1] . ">$nl" . $$long[-1] . "$pad</$prop>$nl";
681
688
  } else {
682
- $$long[-2] .= $$short[-1] . "/>\n"; # empty element (ie. all shorthand)
689
+ $$long[-2] .= $$short[-1] . "/>$nl"; # empty element (ie. all shorthand)
683
690
  }
684
691
  $$short[-1] = $$long[-1] = '';
685
692
  } else {
686
693
  # close this property (no chance of shorthand)
687
- $$long[-1] .= "$pad</$prop>\n";
694
+ $$long[-1] .= "$pad</$prop>$nl";
688
695
  unless (@$curPropList) {
689
696
  # add properties now that this top-level Description is complete
690
- $$long[-2] .= ">\n" . $$long[-1];
697
+ $$long[-2] .= ">$nl" . $$long[-1];
691
698
  $$long[-1] = '';
692
699
  }
693
700
  }
@@ -715,11 +722,11 @@ sub WriteXMP($$;$)
715
722
  my $xmpFile = (not $tagTablePtr); # this is an XMP data file if no $tagTablePtr
716
723
  # prefer XMP over other metadata formats in some types of files
717
724
  my $preferred = $xmpFile || ($$et{PreferredGroup} and $$et{PreferredGroup} eq 'XMP');
718
- my $verbose = $et->Options('Verbose');
719
- my $compact = $et->Options('Compact') || 0;
725
+ my $verbose = $$et{OPTIONS}{Verbose};
726
+ my $compact = $$et{OPTIONS}{Compact} || 0;
720
727
  my $dirLen = $$dirInfo{DirLen};
721
728
  $dirLen = length($$dataPt) if not defined $dirLen and $dataPt;
722
- $noPad = ($compact > 1);
729
+ $noPad = $compact > 1 ? ($compact > 3 ? 2 : 1) : undef;
723
730
  #
724
731
  # extract existing XMP information into %capture hash
725
732
  #
@@ -1229,7 +1236,7 @@ sub WriteXMP($$;$)
1229
1236
  # write out the new XMP information (serialize it)
1230
1237
  #
1231
1238
  # start writing the XMP data
1232
- my $useShorthand = $et->Options('XMPShorthand');
1239
+ my $useShorthand = $$et{OPTIONS}{XMPShorthand} || $compact > 4;
1233
1240
  my (@long, @short, @resFlag);
1234
1241
  $long[0] = $long[1] = $short[0] = '';
1235
1242
  if ($$et{XMP_NO_XPACKET}) {
@@ -1272,6 +1279,8 @@ sub WriteXMP($$;$)
1272
1279
  }
1273
1280
  }
1274
1281
 
1282
+ my ($sp, $nl) = $noPad ? ('', $noPad > 1 ? '' : "\n") : (' ',"\n");
1283
+
1275
1284
  # write out all properties
1276
1285
  for (;;) {
1277
1286
  my (%nsNew, $newDesc);
@@ -1307,7 +1316,7 @@ sub WriteXMP($$;$)
1307
1316
  my ($path2, $ns2);
1308
1317
  foreach $path2 (@pathList) {
1309
1318
  my @ns2s = ($path2 =~ m{(?:^|/)([^/]+?):}g);
1310
- my $opening = 0;
1319
+ my $opening = $compact > 2 ? 1 : 0;
1311
1320
  foreach $ns2 (@ns2s) {
1312
1321
  next if $ns2 eq 'rdf';
1313
1322
  $nsNew{$ns2} and ++$opening, next;
@@ -1336,9 +1345,8 @@ sub WriteXMP($$;$)
1336
1345
  # open the new description
1337
1346
  $prop = $rdfDesc;
1338
1347
  %nsCur = %nsNew; # save current namespaces
1339
- my $sp = $noPad ? '' : ' ';
1340
1348
  my @ns = sort keys %nsCur;
1341
- $long[-2] .= "\n$sp<$prop rdf:about='${about}'";
1349
+ $long[-2] .= "$nl$sp<$prop rdf:about='${about}'";
1342
1350
  # generate et:toolkit attribute if this is an exiftool RDF/XML output file
1343
1351
  if (@ns and $nsCur{$ns[0]} =~ m{^http://ns.exiftool.ca/}) {
1344
1352
  $long[-2] .= "\n$sp${sp}xmlns:et='http://ns.exiftool.ca/1.0/'" .
@@ -1365,7 +1373,7 @@ sub WriteXMP($$;$)
1365
1373
  {
1366
1374
  # check for empty structure
1367
1375
  if ($propList[$n+1] =~ /:~dummy~$/) {
1368
- $long[-1] .= " rdf:parseType='Resource'/>\n";
1376
+ $long[-1] .= " rdf:parseType='Resource'/>$nl";
1369
1377
  pop @curPropList;
1370
1378
  $dummy = 1;
1371
1379
  last;
@@ -1376,10 +1384,10 @@ sub WriteXMP($$;$)
1376
1384
  push @short, '';
1377
1385
  } else {
1378
1386
  # use rdf:parseType='Resource' to avoid new 'rdf:Description'
1379
- $long[-1] .= " rdf:parseType='Resource'>\n";
1387
+ $long[-1] .= " rdf:parseType='Resource'>$nl";
1380
1388
  }
1381
1389
  } else {
1382
- $long[-1] .= ">\n"; # (will be no shorthand properties)
1390
+ $long[-1] .= ">$nl"; # (will be no shorthand properties)
1383
1391
  }
1384
1392
  }
1385
1393
  my $prop2 = pop @propList; # get new property name
@@ -1398,7 +1406,7 @@ sub WriteXMP($$;$)
1398
1406
  my $quot = ($attrVal =~ /'/) ? '"' : "'";
1399
1407
  $long[-1] .= " $attr=$quot$attrVal$quot";
1400
1408
  }
1401
- $long[-1] .= length $val ? ">$val</$prop2>\n" : "/>\n";
1409
+ $long[-1] .= length $val ? ">$val</$prop2>$nl" : "/>$nl";
1402
1410
  }
1403
1411
  }
1404
1412
  }
@@ -1415,9 +1423,9 @@ sub WriteXMP($$;$)
1415
1423
  $$dirInfo{ExtendedXMP} = $rtn[0];
1416
1424
  $$dirInfo{ExtendedGUID} = $rtn[1];
1417
1425
  # compact if necessary to fit
1418
- $compact = 1 if length($long[-2]) + 101 * $numPadLines > $maxDataLen;
1426
+ $compact = 1 if length($long[-2]) + 101 * $numPadLines > $maxDataLen and not $compact;
1419
1427
  }
1420
- $compact = 1 if $$dirInfo{Compact};
1428
+ $compact = 1 if $$dirInfo{Compact} and not $compact;
1421
1429
  #
1422
1430
  # close out the XMP, clean up, and return our data
1423
1431
  #
@@ -1439,7 +1447,7 @@ sub WriteXMP($$;$)
1439
1447
  # pad to specified DirLen
1440
1448
  if ($len > $dirLen) {
1441
1449
  my $str = 'Not enough room to edit XMP in place';
1442
- $str .= '. Try XMPShorthand option' unless $$et{OPTIONS}{XMPShorthand};
1450
+ $str .= '. Try XMPShorthand option' unless $$et{OPTIONS}{XMPShorthand} or $compact > 4;
1443
1451
  $et->Warn($str);
1444
1452
  return undef;
1445
1453
  }
@@ -282,7 +282,7 @@ sub ProcessRAR($$)
282
282
  last if $size < 0;
283
283
  next unless $size; # ignore blocks with no data
284
284
  # don't try to read very large blocks unless LargeFileSupport is enabled
285
- if ($size > 0x80000000 and not $et->Options('LargeFileSupport')) {
285
+ if ($size >= 0x80000000 and not $et->Options('LargeFileSupport')) {
286
286
  $et->Warn('Large block encountered. Aborting.');
287
287
  last;
288
288
  }
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 11.51
3
+ Version: 11.52
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.51.0')
4
+ VERSION = Gem::Version.new('11.52.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.51.0
4
+ version: 11.52.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-06-13 00:00:00.000000000 Z
12
+ date: 2019-06-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool