exiftool_vendored 12.97.0 → 12.98.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 40145323efe802f85d7d63896f6625f4f814d99c0b7af905187c5e4723a2d280
4
- data.tar.gz: 507b11c61f464d9afab44d071d9da8e306378589cbe60b505b25336bce853bf7
3
+ metadata.gz: c1a9880dae5035dc08ddc167d771f69b84d15bc6e5f8d4bcb2eb410c22dd531f
4
+ data.tar.gz: 6e3b103009afb397df4213f33c9f695a961a153b647264dadfbf3917aba063fc
5
5
  SHA512:
6
- metadata.gz: 3cbeb84218d46abc790daa396a9b48adf8ce36b57c948fa854fa3c441b1d269b8ef5540363c2940ed620254156aee55e7814cf6ae38df9e28d5fc291ae119c2c
7
- data.tar.gz: '097ce6e1cb57f52cf953407ffca02f4f466a7d7662d20eed17d3355644aa2680fdb397c1fbf8032ed461f2b2f0d374e3a02e47cb95e50cddcb80e2938d3bed02'
6
+ metadata.gz: a09fd4ca266dd56cac58e246d5a899f34d90f0a93749e9b522129bb3d009e3d36b8ecef7187e54caf6c0a775ab7a9a234e32608b45ae08b778e4de9d3747872b
7
+ data.tar.gz: 4119e87dd640a1c9ee73041b5fb915b5cbfbee7c21689ebdefa826f933a35e29e40d7ec5cd952c68b62ab90c5cc544292346e7a45581f355b92ba7a49ca76ec1
data/bin/Changes CHANGED
@@ -7,6 +7,14 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 12.76. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Oct. 8, 2024 - Version 12.98
11
+
12
+ - Added write support for PDF files with huge offsets
13
+ - Added a number of new Sony LensType values (thanks Jos Roost)
14
+ - Require -v4 or higher to output "JPG RST" lines
15
+ - Patched problem with -fast option when reading HEIC file via a pipe
16
+ - Patched to avoid hang when reading some corrupted XMP
17
+
10
18
  Sept. 25, 2024 - Version 12.97
11
19
 
12
20
  - Added ability to ignore up to 4095 bytes of garbage at the end of an INDD
@@ -143,7 +151,7 @@ June 7, 2024 - Version 12.86
143
151
  - Patched some Olympus WB_RBLevels tags to allow 4 values to be written as per
144
152
  some newer models
145
153
  - Fixed issue when writing IPTC date tags with a date/time value containing
146
- subseconds with 4 or more digits
154
+ subseconds with 4 or more digits
147
155
 
148
156
  May 21, 2024 - Version 12.85
149
157
 
data/bin/META.json CHANGED
@@ -50,5 +50,5 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "12.97"
53
+ "version" : "12.98"
54
54
  }
data/bin/META.yml CHANGED
@@ -31,4 +31,4 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '12.97'
34
+ version: '12.98'
data/bin/README CHANGED
@@ -109,8 +109,8 @@ your home directory, then you would type the following commands in a
109
109
  terminal window to extract and run ExifTool:
110
110
 
111
111
  cd ~/Desktop
112
- gzip -dc Image-ExifTool-12.97.tar.gz | tar -xf -
113
- cd Image-ExifTool-12.97
112
+ gzip -dc Image-ExifTool-12.98.tar.gz | tar -xf -
113
+ cd Image-ExifTool-12.98
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '12.97';
14
+ my $version = '12.98';
15
15
 
16
16
  # add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
17
17
  my $exePath;
@@ -5662,7 +5662,7 @@ with this command:
5662
5662
 
5663
5663
  produces output like this:
5664
5664
 
5665
- -- Generated by ExifTool 12.97 --
5665
+ -- Generated by ExifTool 12.98 --
5666
5666
  File: a.jpg - 2003:10:31 15:44:19
5667
5667
  (f/5.6, 1/60s, ISO 100)
5668
5668
  File: b.jpg - 2006:05:23 11:57:38
@@ -6204,9 +6204,10 @@ B<-fileNUM> option is used to read an alternate file and the corresponding
6204
6204
  family 8 group name is specified for the tag. See the B<-fileNUM> option
6205
6205
  details for more information.
6206
6206
 
6207
- 5) The B<-a> option has no effect on the evaluation of the expression, and
6208
- the values of duplicate tags are accessible only by specifying a group name
6209
- (such as a family 4 instance number, eg. C<$Copy1:TAG>, C<$Copy2:TAG>, etc).
6207
+ 5) The B<-a> (Duplicates) option is implied when B<-if> is used without a
6208
+ fast I<NUM>, and the values of duplicate tags are accessible by specifying a
6209
+ group name in the expression (such as a family 4 instance number, eg.
6210
+ C<$Copy1:TAG>, C<$Copy2:TAG>, etc).
6210
6211
 
6211
6212
  6) A special "OK" UserParam is available to test the success of the previous
6212
6213
  command when B<-execute> was used, and may be used like any other tag in the
@@ -6472,9 +6473,9 @@ B<-f> adds 'flags' and 'struct' attributes if applicable. The flags are
6472
6473
  formatted as a comma-separated list of the following possible values:
6473
6474
  Avoid, Binary, List, Mandatory, Permanent, Protected, Unknown and Unsafe
6474
6475
  (see the L<Tag Name documentation|Image::ExifTool::TagNames>). For XMP List
6475
- tags, the list type (Alt, Bag or Seq) is added to the flags, and flattened
6476
- structure tags are indicated by a Flattened flag with 'struct' giving the ID
6477
- of the parent structure.
6476
+ tags, the list type (Alt, Bag or Seq) is also given, and flattened structure
6477
+ tags are indicated by a Flattened flag with 'struct' giving the ID of the
6478
+ parent structure.
6478
6479
 
6479
6480
  Note that none of the B<-list> options require an input I<FILE>.
6480
6481
 
@@ -41,7 +41,7 @@ require 5.002;
41
41
  require Exporter;
42
42
 
43
43
  use vars qw($VERSION @ISA @EXPORT_OK);
44
- $VERSION = '1.12';
44
+ $VERSION = '1.13';
45
45
  @ISA = qw(Exporter);
46
46
 
47
47
  sub Read($$$);
@@ -158,7 +158,10 @@ sub Seek($$;$)
158
158
  $self->Slurp(); # read whole file into buffer
159
159
  $newPos = $num + $self->{LEN}; # relative to end of file
160
160
  }
161
- if ($newPos >= 0) {
161
+ if ($newPos >= 0 and
162
+ # can't go backwards in unbuffered non-seekable file
163
+ (not $self->{NoBuffer} or $newPos >= $self->{POS}))
164
+ {
162
165
  $self->{POS} = $newPos;
163
166
  $rtnVal = 1;
164
167
  }
@@ -14,7 +14,7 @@ use strict;
14
14
  use vars qw($VERSION);
15
15
  use Image::ExifTool qw(:DataAccess :Utils);
16
16
 
17
- $VERSION = '1.08';
17
+ $VERSION = '1.09';
18
18
 
19
19
  # map for writing metadata to InDesign files (currently only write XMP)
20
20
  my %indMap = (
@@ -104,9 +104,10 @@ sub ProcessIND($$)
104
104
  # this must be null padding or we have a possible error
105
105
  last if $hdr =~ /^\0+$/;
106
106
  # (could be up to 4095 bytes of non-null garbage plus 4095 null bytes from ExifTool)
107
- $raf->Read($buff, 8196) and $hdr .= $buff;
107
+ $raf->Read($buff, 8192) and $hdr .= $buff;
108
+ my $n = length $hdr;
108
109
  $hdr =~ s/\0+$//; # remove trailing nulls
109
- if (length($hdr) > 4095) {
110
+ if ($n > 8190 or length($hdr) > 4095) {
110
111
  $err = 'Corrupt file or unsupported InDesign version';
111
112
  last;
112
113
  }
@@ -16,7 +16,7 @@ use strict;
16
16
  use vars qw($VERSION);
17
17
  use Image::ExifTool qw(:DataAccess :Utils);
18
18
 
19
- $VERSION = '1.40';
19
+ $VERSION = '1.41';
20
20
 
21
21
  sub ProcessJpeg2000Box($$$);
22
22
  sub ProcessJUMD($$$);
@@ -574,6 +574,7 @@ my %j2cMarker = (
574
574
  2 => {
575
575
  Name => 'CompatibleBrands',
576
576
  Format => 'undef[$size-8]',
577
+ List => 1, # (for documentation only)
577
578
  # ignore any entry with a null, and return others as a list
578
579
  ValueConv => 'my @a=($val=~/.{4}/sg); @a=grep(!/\0/,@a); \@a',
579
580
  },
@@ -328,6 +328,14 @@ sub ParsePID($$$$$)
328
328
  $more = 1; # read past unknown 0x15 packets if ExtractEmbedded > 2
329
329
  }
330
330
  }
331
+ # still have a lot of questions about how to decode this...
332
+ # (see https://exiftool.org/forum/index.php?topic=16486 and ../testpics/gps_video/forum16486.ts)
333
+ # } elsif ($type == 6) {
334
+ # my @a = unpack('x17x2NNx2nx2nx2nx2Cx2a4x2a5x2Nx2Nx2nx2Nx2Nx2Nx2nx2nx2Nx2nx2n', $$dataPt . " ");
335
+ # my $hi = shift @a;
336
+ # $a[0] = Image::ExifTool::ConvertUnixTime(($a[0] + $hi * 4294967296) * 1e-6, undef, 6);
337
+ # print "@a\n";
338
+ # $more = 1;
331
339
  } elsif ($type < 0) {
332
340
  if ($$dataPt =~ /^(.{164})?(.{24})A[NS][EW]/s) {
333
341
  # (Blueskysea B4K, Novatek NT96670)
@@ -48,7 +48,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
48
48
  use Image::ExifTool::Exif;
49
49
  use Image::ExifTool::GPS;
50
50
 
51
- $VERSION = '3.02';
51
+ $VERSION = '3.03';
52
52
 
53
53
  sub ProcessMOV($$;$);
54
54
  sub ProcessKeys($$$);
@@ -935,6 +935,7 @@ my %userDefined = (
935
935
  2 => {
936
936
  Name => 'CompatibleBrands',
937
937
  Format => 'undef[$size-8]',
938
+ List => 1, # (for documentation only)
938
939
  # ignore any entry with a null, and return others as a list
939
940
  ValueConv => 'my @a=($val=~/.{4}/sg); @a=grep(!/\0/,@a); \@a',
940
941
  },
@@ -2551,7 +2552,7 @@ my %userDefined = (
2551
2552
  TTID => { Name => 'TomTomID', ValueConv => 'unpack("x4H*",$val)' },
2552
2553
  TTVI => { Name => 'TomTomVI', Format => 'int32u', Unknown => 1 }, # seen: "0 1 61 508 508"
2553
2554
  # TTVD seen: "normal 720p 60fps 60fps 16/9 wide 1x"
2554
- TTVD => { Name => 'TomTomVD', ValueConv => 'my @a = ($val =~ /[\x20-\x7f]+/g); "@a"' },
2555
+ TTVD => { Name => 'TomTomVD', ValueConv => 'my @a = ($val =~ /[\x20-\x7f]+/g); "@a"', List => 1 },
2555
2556
  );
2556
2557
 
2557
2558
  # User-specific media data atoms (ref 11)
@@ -9151,7 +9152,7 @@ sub HandleItemInfo($)
9151
9152
  $et->ProcessDirectory(\%dirInfo, $subTable, $proc);
9152
9153
  delete $$et{DOC_NUM};
9153
9154
  }
9154
- $raf->Seek($curPos, 0); # seek back to original position
9155
+ $raf->Seek($curPos, 0) or $et->Warn('Seek error'), last; # seek back to original position
9155
9156
  pop @{$$et{PATH}};
9156
9157
  }
9157
9158
  # process the item properties now that we should know their associations and document numbers
@@ -9577,7 +9578,7 @@ sub ProcessMOV($$;$)
9577
9578
  if ($tag eq 'ftyp' and $size >= 12) {
9578
9579
  # read ftyp atom to see what type of file this is
9579
9580
  if ($raf->Read($buff, $size-8) == $size-8) {
9580
- $raf->Seek(-($size-8), 1);
9581
+ $raf->Seek(-($size-8), 1) or $et->Warn('Seek error'), return 0;
9581
9582
  my $type = substr($buff, 0, 4);
9582
9583
  $$et{save_ftyp} = $type;
9583
9584
  # see if we know the extension for this file type
@@ -9629,7 +9630,7 @@ sub ProcessMOV($$;$)
9629
9630
  # a zero size isn't legal for contained atoms, but Canon uses it to
9630
9631
  # terminate the CNTH atom (eg. CanonEOS100D.mov), so tolerate it here
9631
9632
  my $pos = $raf->Tell() - 4;
9632
- $raf->Seek(0,2);
9633
+ $raf->Seek(0,2) or $et->Warn('Seek error'), return 0;
9633
9634
  my $str = $$dirInfo{DirName} . ' with ' . ($raf->Tell() - $pos) . ' bytes';
9634
9635
  $et->VPrint(0,"$$et{INDENT}\[Terminator found in $str remaining]");
9635
9636
  } else {
@@ -9638,7 +9639,7 @@ sub ProcessMOV($$;$)
9638
9639
  if ($$tagTablePtr{"$tag-size"}) {
9639
9640
  my $pos = $raf->Tell();
9640
9641
  unless ($fast) {
9641
- $raf->Seek(0, 2);
9642
+ $raf->Seek(0, 2) or $et->Warn('Seek error'), return 0;
9642
9643
  $et->HandleTag($tagTablePtr, "$tag-size", $raf->Tell() - $pos);
9643
9644
  }
9644
9645
  $et->HandleTag($tagTablePtr, "$tag-offset", $pos) if $$tagTablePtr{"$tag-offset"};
@@ -34,7 +34,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
34
34
  use Image::ExifTool::Exif;
35
35
  use Image::ExifTool::Minolta;
36
36
 
37
- $VERSION = '3.69';
37
+ $VERSION = '3.70';
38
38
 
39
39
  sub ProcessSRF($$$);
40
40
  sub ProcessSR2($$$);
@@ -170,6 +170,7 @@ sub PrintInvLensSpec($;$$);
170
170
  32885 => 'Sony FE 16-35mm F2.8 GM II', #JR
171
171
  32886 => 'Sony FE 300mm F2.8 GM OSS', #JR
172
172
  32887 => 'Sony E PZ 16-50mm F3.5-5.6 OSS II', #JR
173
+ 32888 => 'Sony FE 85mm F1.4 GM II', #JR
173
174
 
174
175
  # (comment this out so LensID will report the LensModel, which is more useful)
175
176
  # 32952 => 'Metabones Canon EF Speed Booster Ultra', #JR (corresponds to 184, but 'Advanced' mode, LensMount reported as E-mount)
@@ -241,6 +242,8 @@ sub PrintInvLensSpec($;$$);
241
242
  49474.9 => 'Viltrox 75mm F1.2 E', #JR
242
243
  '49474.10' => 'Viltrox 20mm F2.8 FE', #JR
243
244
  49475 => 'Tamron 50-300mm F4.5-6.3 Di III VC VXD', #JR (Model A069)
245
+ 49476 => 'Tamron 28-300mm F4-7.1 Di III VC VXD', #JR (Model A074)
246
+ 49477 => 'Tamron 90mm F2.8 Di III Macro VXD', #JR (Model F072)
244
247
 
245
248
  49712 => 'Tokina FiRIN 20mm F2 FE AF', # (firmware Ver.01)
246
249
  49713 => 'Tokina FiRIN 100mm F2.8 FE MACRO', # (firmware Ver.01)
@@ -299,6 +302,7 @@ sub PrintInvLensSpec($;$$);
299
302
  50547 => 'Sigma 10-18mm F2.8 DC DN | C', #JR (023)
300
303
  50548 => 'Sigma 15mm F1.4 DG DN DIAGONAL FISHEYE | A', #JR (024)
301
304
  50549 => 'Sigma 50mm F1.2 DG DN | A', #JR (024)
305
+ 50550 => 'Sigma 28-105mm F2.8 DG DN | A', #JR (024)
302
306
  50551 => 'Sigma 28-45mm F1.8 DG DN | A', #JR (024)
303
307
 
304
308
  50992 => 'Voigtlander SUPER WIDE-HELIAR 15mm F4.5 III', #JR
@@ -315,6 +319,7 @@ sub PrintInvLensSpec($;$$);
315
319
  51003 => 'Voigtlander NOKTON 35mm F1.2 Aspherical SE', #JR
316
320
  51006 => 'Voigtlander APO-LANTHAR 35mm F2 Aspherical', #JR
317
321
  51007 => 'Voigtlander NOKTON 50mm F1 Aspherical', #JR
322
+ 51008 => 'Voigtlander NOKTON 75mm F1.5 Aspherical', #JR
318
323
 
319
324
  # lenses listed in the Sigma MC-11 list, but not yet seen:
320
325
  # 504xx => 'Sigma 18-200mm F3.5-6.3 DC MACRO OS HSM | C + MC-11', # (014)
@@ -26108,7 +26108,7 @@ the image undisplayable.
26108
26108
  ------ -------- --------
26109
26109
  0 MajorBrand no
26110
26110
  1 MinorVersion no
26111
- 2 CompatibleBrands no
26111
+ 2 CompatibleBrands no+
26112
26112
 
26113
26113
  =head3 Jpeg2000 ImageHeader Tags
26114
26114
 
@@ -30230,7 +30230,7 @@ Tags found in Pittasoft Blackvue dashcam "free" data.
30230
30230
  ------ -------- --------
30231
30231
  0 MajorBrand no
30232
30232
  1 MinorVersion no
30233
- 2 CompatibleBrands no
30233
+ 2 CompatibleBrands no+
30234
30234
 
30235
30235
  =head3 QuickTime OtherMeta Tags
30236
30236
 
@@ -31280,7 +31280,7 @@ Tags found in TomTom Bandit Action Cam MP4 videos.
31280
31280
  'TTAD' TomTomAD QuickTime Stream
31281
31281
  'TTHL' TomTomHL? no
31282
31282
  'TTID' TomTomID no
31283
- 'TTVD' TomTomVD no
31283
+ 'TTVD' TomTomVD no+
31284
31284
  'TTVI' TomTomVI? no
31285
31285
 
31286
31286
  =head3 QuickTime HintTrackInfo Tags
@@ -184,11 +184,19 @@ sub GetFreeEntries($)
184
184
  {
185
185
  my $dict = shift;
186
186
  my %xrefFree;
187
- # from the start we have only written xref stream entries in 'CNn' format,
188
- # so we can simplify things for now and only support this type of entry
187
+ # we write xref stream entries in 'CNn' or 'CNNn' format (with 8-byte 'NN' offset),
189
188
  my $w = $$dict{W};
190
- if (ref $w eq 'ARRAY' and "@$w" eq '1 4 2') {
191
- my $size = $$dict{_entry_size}; # this will be 7 for 'CNn'
189
+ if (ref $w eq 'ARRAY') {
190
+ my $bytes = "@$w";
191
+ my $fmt;
192
+ if ($bytes eq '1 4 2') {
193
+ $fmt = 'CNn';
194
+ } elsif ($bytes eq '1 8 2') {
195
+ $fmt = 'CNNn';
196
+ } else {
197
+ return \%xrefFree;
198
+ }
199
+ my $size = $$dict{_entry_size}; # this will be 7 for 'CNn' or 11 for 'CNNn'
192
200
  my $index = $$dict{Index};
193
201
  my $len = length $$dict{_stream};
194
202
  # scan the table for free objects
@@ -200,7 +208,12 @@ sub GetFreeEntries($)
200
208
  my $count = $$index[$i*2+1];
201
209
  for ($j=0; $j<$count; ++$j) {
202
210
  last if $pos + $size > $len;
203
- my @t = unpack("x$pos CNn", $$dict{_stream});
211
+ my @t = unpack("x$pos $fmt", $$dict{_stream});
212
+ if (@t == 4) {
213
+ $t[1] = $t[1] * 4294967296 + $t[2];
214
+ $t[2] = $t[3];
215
+ @t = 3;
216
+ }
204
217
  # add entry if object was free
205
218
  $xrefFree{$start+$j} = [ $t[1], $t[2], 'f' ] if $t[0] == 0;
206
219
  $pos += $size; # step to next entry
@@ -657,24 +670,37 @@ sub WritePDF($$)
657
670
  $newXRef{$nextObject++} = [ Tell($outfile) - $$et{PDFBase} + length($/), 0, 'n' ];
658
671
  $$mainDict{Size} = $nextObject;
659
672
  # create xref stream and Index entry
660
- $$mainDict{W} = [ 1, 4, 2 ]; # int8u, int32u, int16u ('CNn')
661
- $$mainDict{Index} = [ ];
662
- $$mainDict{_stream} = '';
663
- my @ids = sort { $a <=> $b } keys %newXRef;
664
- while (@ids) {
665
- my $startID = $ids[0];
666
- for (;;) {
667
- $id = shift @ids;
668
- my ($pos, $gen, $type) = @{$newXRef{$id}};
669
- if ($pos > 0xffffffff) {
670
- $et->Error('Huge files not yet supported');
671
- last;
673
+ my $bits = 4;
674
+ Restart: for (;;) {
675
+ $$mainDict{W} = [ 1, $bits, 2 ]; # int8u, int32u/int64u, int16u ('CNn' or 'CNNn')
676
+ $$mainDict{Index} = [ ];
677
+ $$mainDict{_stream} = '';
678
+ my @ids = sort { $a <=> $b } keys %newXRef;
679
+ while (@ids) {
680
+ my $startID = $ids[0];
681
+ for (;;) {
682
+ $id = shift @ids;
683
+ my ($pos, $gen, $type) = @{$newXRef{$id}};
684
+ if ($pos > 0xffffffff) {
685
+ if ($bits == 4) {
686
+ # switch to 64-bit integer offsets
687
+ $bits = 8;
688
+ next Restart;
689
+ }
690
+ }
691
+ if ($bits == 4) {
692
+ $$mainDict{_stream} .= pack('CNn', $type eq 'f' ? 0 : 1, $pos, $gen);
693
+ } else {
694
+ my $hi = int($pos / 4294967296);
695
+ my $lo = $pos - $hi * 4294967296;
696
+ $$mainDict{_stream} .= pack('CNNn', $type eq 'f' ? 0 : 1, $hi, $lo, $gen);
697
+ }
698
+ last if not @ids or $ids[0] != $id + 1;
672
699
  }
673
- $$mainDict{_stream} .= pack('CNn', $type eq 'f' ? 0 : 1, $pos, $gen);
674
- last if not @ids or $ids[0] != $id + 1;
700
+ # add Index entries for this section of the xref stream
701
+ push @{$$mainDict{Index}}, $startID, $id - $startID + 1;
675
702
  }
676
- # add Index entries for this section of the xref stream
677
- push @{$$mainDict{Index}}, $startID, $id - $startID + 1;
703
+ last;
678
704
  }
679
705
  # write the xref stream object
680
706
  $keyExt = "$id 0 obj"; # (set anyway, but xref stream should NOT be encrypted)
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.66';
53
+ $VERSION = '3.67';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -3777,8 +3777,13 @@ sub ParseXMPElement($$$;$$$$)
3777
3777
 
3778
3778
  # extract property attributes
3779
3779
  my ($parseResource, %attrs, @attrs);
3780
- while ($attrs =~ m/(\S+?)\s*=\s*(['"])(.*?)\2/sg) {
3781
- my ($attr, $val) = ($1, $3);
3780
+ # this hangs Perl (v5.18.4) for a specific capture string [patched in ExifTool 12.98]
3781
+ # while ($attrs =~ m/(\S+?)\s*=\s*(['"])(.*?)\2/sg) {
3782
+ while ($attrs =~ /(\S+?)\s*=\s*(['"])/g) {
3783
+ my ($attr, $quote) = ($1, $2);
3784
+ my $p0 = pos($attrs);
3785
+ last unless $attrs =~ /$quote/g;
3786
+ my $val = substr($attrs, $p0, pos($attrs)-$p0-1);
3782
3787
  # handle namespace prefixes (defined by xmlns:PREFIX, or used with PREFIX:tag)
3783
3788
  if ($attr =~ /(.*?):/) {
3784
3789
  if ($1 eq 'xmlns') {
@@ -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 $advFmtSelf);
31
31
 
32
- $VERSION = '12.97';
32
+ $VERSION = '12.98';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -1466,12 +1466,12 @@ my %systemTagsNotes = (
1466
1466
  PrintConv => sub {
1467
1467
  my ($mask, $val) = (0400, oct(shift));
1468
1468
  my %types = (
1469
- 0010000 => 'p',
1470
- 0020000 => 'c',
1471
- 0040000 => 'd',
1472
- 0060000 => 'b',
1473
- 0120000 => 'l',
1474
- 0140000 => 's',
1469
+ 0010000 => 'p', # FIFO
1470
+ 0020000 => 'c', # character special file
1471
+ 0040000 => 'd', # directory
1472
+ 0060000 => 'b', # block special file
1473
+ 0120000 => 'l', # sym link
1474
+ 0140000 => 's', # socket link
1475
1475
  );
1476
1476
  my $str = $types{$val & 0170000} || '-';
1477
1477
  while ($mask) {
@@ -7290,7 +7290,10 @@ sub ProcessJPEG($$;$)
7290
7290
  last; # all done parsing file
7291
7291
  } elsif (defined $markerLenBytes{$marker}) {
7292
7292
  # handle other stand-alone markers and segments we skipped over
7293
- $verbose and $marker and print $out "${indent}JPEG $markerName\n";
7293
+ if ($verbose and $marker) {
7294
+ next if $verbose < 4 and ($marker & 0xf8) == 0xd0;
7295
+ print $out "${indent}JPEG $markerName\n";
7296
+ }
7294
7297
  next;
7295
7298
  } elsif ($marker == 0xdb and length($$segDataPt) and # DQT
7296
7299
  # save the DQT data only if JPEGDigest has been requested
@@ -1,6 +1,6 @@
1
1
  Summary: perl module for image data extraction
2
2
  Name: perl-Image-ExifTool
3
- Version: 12.97
3
+ Version: 12.98
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.97.0')
4
+ VERSION = Gem::Version.new('12.98.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.97.0
4
+ version: 12.98.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: 2024-09-25 00:00:00.000000000 Z
12
+ date: 2024-10-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: exiftool