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 +4 -4
- data/bin/Changes +9 -1
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +9 -8
- data/bin/lib/File/RandomAccess.pm +5 -2
- data/bin/lib/Image/ExifTool/InDesign.pm +4 -3
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +2 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +8 -0
- data/bin/lib/Image/ExifTool/QuickTime.pm +7 -6
- data/bin/lib/Image/ExifTool/Sony.pm +6 -1
- data/bin/lib/Image/ExifTool/TagNames.pod +3 -3
- data/bin/lib/Image/ExifTool/WritePDF.pl +47 -21
- data/bin/lib/Image/ExifTool/XMP.pm +8 -3
- data/bin/lib/Image/ExifTool.pm +11 -8
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c1a9880dae5035dc08ddc167d771f69b84d15bc6e5f8d4bcb2eb410c22dd531f
|
4
|
+
data.tar.gz: 6e3b103009afb397df4213f33c9f695a961a153b647264dadfbf3917aba063fc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
data/bin/META.yml
CHANGED
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.
|
113
|
-
cd Image-ExifTool-12.
|
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.
|
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.
|
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
|
6208
|
-
the values of duplicate tags are accessible
|
6209
|
-
(such as a family 4 instance number, eg.
|
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
|
6476
|
-
|
6477
|
-
|
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.
|
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.
|
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,
|
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.
|
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.
|
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.
|
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
|
-
#
|
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'
|
191
|
-
my $
|
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
|
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
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
my
|
666
|
-
|
667
|
-
$
|
668
|
-
|
669
|
-
|
670
|
-
$
|
671
|
-
|
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
|
-
|
674
|
-
|
700
|
+
# add Index entries for this section of the xref stream
|
701
|
+
push @{$$mainDict{Index}}, $startID, $id - $startID + 1;
|
675
702
|
}
|
676
|
-
|
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.
|
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
|
-
|
3781
|
-
|
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') {
|
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -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.
|
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
|
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
|
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.
|
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
|
12
|
+
date: 2024-10-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: exiftool
|