exiftool_vendored 12.97.0 → 12.98.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
  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