exiftool_vendored 13.52.0 → 13.53.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: f1432f9788115500c5dc934cf7a08f704b8ac43891cd615e31613b08b296d6e4
4
- data.tar.gz: 64a324bd2b96853ea8324c43fe1af74a4aa8b57fcda53253d5ec84b28371b59c
3
+ metadata.gz: c653bfd291b7881243e271beba3bdcf6af6343647b7736ea5750a8b6427c6ba2
4
+ data.tar.gz: 550046af23b550283317d05a7d3387d2e977efd2d3c74af0285808f8035c7756
5
5
  SHA512:
6
- metadata.gz: 3712cd77765affd98d21ec3a8602dc4a2d2f86ccff56c3eb44f437cd7711182e9c7aaaccef566f3bfd045499f72a3641d01b05dec5891cf34059b7d76444892f
7
- data.tar.gz: 248b84f36b0dc2f2cc653ef1ee0832adbcbce7d386dc482941a85db67fa2704a23d7a0724cb3d10527aac782a5ee32a11aaca2f0da3277b4180862a5fdf6b7f0
6
+ metadata.gz: a2dabd27da939c74ff1300eaea01b3597c994d9fe456bb2d386f6d5eba0f6fb682c8c154ac3ad833e8fd7e63f421b01f3c5c0b307989cb8e030284f2a5c0bf13
7
+ data.tar.gz: eb1cff971653f098e366a793786e43caa79a378134287935afd997f5dad37212f9bb6bf7b64523c85c4774e53fcd84379dc34b1016fa428f6d158011f0b69f5b
data/bin/Changes CHANGED
@@ -7,6 +7,21 @@ RSS feed: https://exiftool.org/rss.xml
7
7
  Note: The most recent production release is Version 13.50. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ Mar. 19, 2026 - Version 13.53
11
+
12
+ - Added ability to read FileCreateDate (btime) on Linux systems
13
+ - Added a bunch more Sony lenses (thanks Jos Roost)
14
+ - Added warnings for possibly malicious or corrupted LNK files (github #401)
15
+ - Decode timed GPS from Kenwood DRV-A510W MP4 videos
16
+ - Decode more information from LNK files
17
+ - Reduced memory requirements when running on a large number of files,
18
+ particularly when the -U option is used
19
+ - Patched a potential security issue in Windows version
20
+ - Fixed possible "undefined value" runtime warnings when reading torrent and
21
+ WPG files (thanks Raf)
22
+ - Fixed issue which could result in an "uninitialized value" runtime error
23
+ when parsing corrupted CBOR information
24
+
10
25
  Feb. 27, 2026 - Version 13.52
11
26
 
12
27
  - Added a number of new XMP tags written by Adobe software
@@ -27,7 +42,7 @@ Feb. 19, 2026 - Version 13.51
27
42
  - Added a new Nikon LensID (thanks Johan)
28
43
  - Decode more tags from Windows LNK files
29
44
  - Decode another LIGOGPSINFO variant (github #394)
30
- - Decode some new Canon tags (thanks Peter Wem, github #389, #390, #393)
45
+ - Decode some new Canon tags (thanks Peter Wem, github #389, #390, #393)
31
46
  - Decode some new Nikon tags
32
47
  - Split decoding on Nikon BurstGroupID into separate tags
33
48
  - Fixed round-off error in GPSDateTime seconds for camm6 metadata in MP4
data/bin/META.json CHANGED
@@ -50,6 +50,6 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.52",
53
+ "version" : "13.53",
54
54
  "x_serialization_backend" : "JSON::PP version 4.06"
55
55
  }
data/bin/META.yml CHANGED
@@ -31,5 +31,5 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '13.52'
34
+ version: '13.53'
35
35
  x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
data/bin/README CHANGED
@@ -111,8 +111,8 @@ your home directory, then you would type the following commands in a
111
111
  terminal window to extract and run ExifTool:
112
112
 
113
113
  cd ~/Desktop
114
- gzip -dc Image-ExifTool-13.52.tar.gz | tar -xf -
115
- cd Image-ExifTool-13.52
114
+ gzip -dc Image-ExifTool-13.53.tar.gz | tar -xf -
115
+ cd Image-ExifTool-13.53
116
116
  ./exiftool t/images/ExifTool.jpg
117
117
 
118
118
  Note: These commands extract meta information from one of the test images.
@@ -162,6 +162,7 @@ for calculating digest values and providing other features listed below:
162
162
  Win32::FindFile (for Windows Unicode directory support, app only)
163
163
  Win32API::File (for Windows Unicode file names and file times)
164
164
  Compress::Raw::Lzma (for reading encoded 7z files)
165
+ File::StatX (for reading FileCreateDate on Linux systems)
165
166
  IO::Compress::RawDeflate (for writing FLIF images)
166
167
  IO::Uncompress::RawInflate (for reading FLIF images)
167
168
  IO::Compress::Brotli (for writing compressed JXL metadata)
data/bin/exiftool CHANGED
@@ -11,7 +11,7 @@ use strict;
11
11
  use warnings;
12
12
  require 5.004;
13
13
 
14
- my $version = '13.52';
14
+ my $version = '13.53';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -202,6 +202,7 @@ my $progressIncr; # increment for progress counter
202
202
  my $progressMax; # total number of files to process
203
203
  my $progressNext; # next progress count to output
204
204
  my $progStr; # progress message string
205
+ my $purge; # flag to purge memory
205
206
  my $quiet; # flag to disable printing of informational messages / warnings
206
207
  my $rafStdin; # File::RandomAccess for stdin (if necessary to rewind)
207
208
  my $recurse; # recurse into subdirectories (2=also hidden directories)
@@ -309,6 +310,7 @@ my @recommends = qw(
309
310
  Time::Local
310
311
  Unicode::LineBreak
311
312
  Compress::Raw::Lzma
313
+ File::StatX
312
314
  IO::Compress::RawDeflate
313
315
  IO::Uncompress::RawInflate
314
316
  IO::Compress::Brotli
@@ -521,6 +523,7 @@ undef $progressCount;
521
523
  undef $progressIncr;
522
524
  undef $progressMax;
523
525
  undef $progressNext;
526
+ undef $purge;
524
527
  undef $rafStdin;
525
528
  undef $recurse;
526
529
  undef $scanWritable;
@@ -791,6 +794,7 @@ for (;;) {
791
794
  print "Optional libraries:\n";
792
795
  foreach (@recommends) {
793
796
  next if /^Win32/ and $^O ne 'MSWin32';
797
+ next if /StatX/ and $^O ne 'linux';
794
798
  my $ver = eval "require $_ and \$${_}::VERSION";
795
799
  my $alt = $altRecommends{$_};
796
800
  # check for alternative if primary not available
@@ -1172,9 +1176,9 @@ for (;;) {
1172
1176
  $vout = \*STDERR if $vout =~ /^-(\.\w+)?$/;
1173
1177
  next;
1174
1178
  }
1175
- /^overwrite_original$/i and $overwriteOrig = 1, next;
1176
- /^overwrite_original_in_place$/i and $overwriteOrig = 2, next;
1177
- /^plot$/i and require Image::ExifTool::Plot and $plot = Image::ExifTool::Plot->new, next;
1179
+ $a eq 'overwrite_original' and $overwriteOrig = 1, next;
1180
+ $a eq 'overwrite_original_in_place' and $overwriteOrig = 2, next;
1181
+ $a eq 'plot' and require Image::ExifTool::Plot and $plot = Image::ExifTool::Plot->new, next;
1178
1182
  if (/^p(-?)$/ or /^printformat(-?)$/i) {
1179
1183
  my $fmt = shift;
1180
1184
  if ($pass) {
@@ -1192,7 +1196,7 @@ for (;;) {
1192
1196
  next;
1193
1197
  }
1194
1198
  (/^P$/ or $a eq 'preserve') and $preserveTime = 1, next;
1195
- /^password$/i and $mt->Options(Password => shift), next;
1199
+ $a eq 'password' and $mt->Options(Password => shift), next;
1196
1200
  if (/^progress(\d*)(:.*)?$/i) {
1197
1201
  $progressIncr = $1 || 1;
1198
1202
  $progressNext = 0; # start showing progress at the first file
@@ -1207,6 +1211,7 @@ for (;;) {
1207
1211
  $progressCount = 0;
1208
1212
  next;
1209
1213
  }
1214
+ /^purge(\d*)$/i and $purge = $1||1, Image::ExifTool::Purge($purge), next; # (undocumented) added in 13.53
1210
1215
  /^q(uiet)?$/i and ++$quiet, next;
1211
1216
  /^r(ecurse)?(\.?)$/i and $recurse = ($2 ? 2 : 1), next;
1212
1217
  if ($a eq 'require') { # (undocumented) added in version 8.65
@@ -1222,10 +1227,10 @@ for (;;) {
1222
1227
  }
1223
1228
  next;
1224
1229
  }
1225
- /^restore_original$/i and $deleteOrig = 0, next;
1230
+ $a eq 'restore_original' and $deleteOrig = 0, next;
1226
1231
  (/^S$/ or $a eq 'veryshort') and $outFormat+=2, next;
1227
1232
  /^s(hort)?(\d*)$/i and $outFormat = $2 eq '' ? $outFormat + 1 : $2, next;
1228
- /^scanforxmp$/i and $mt->Options(ScanForXMP => 1), next;
1233
+ $a eq 'scanforxmp' and $mt->Options(ScanForXMP => 1), next;
1229
1234
  if (/^sep(arator)?$/i) {
1230
1235
  my $sep = $listSep = shift;
1231
1236
  defined $listSep or Error("Expecting list item separator for -sep option\n"), $badCmd=1, next;
@@ -1360,7 +1365,7 @@ for (;;) {
1360
1365
  next;
1361
1366
  }
1362
1367
  (/^X$/ or $a eq 'xmlformat') and $xml = 1, $html = $json = 0, $mt->Options(Duplicates => 1), next;
1363
- if (/^php$/i) {
1368
+ if ($a eq 'php') {
1364
1369
  $json = 2;
1365
1370
  $html = $xml = 0;
1366
1371
  $mt->Options(Duplicates => 1);
@@ -2074,6 +2079,8 @@ if ($countBadWr or $countBadCr or $countBad) {
2074
2079
  $rtnVal = 2;
2075
2080
  }
2076
2081
 
2082
+ Image::ExifTool::Purge(0) if $purge; # do final purging
2083
+
2077
2084
  # clean up after each command
2078
2085
  Cleanup();
2079
2086
 
@@ -4198,7 +4205,8 @@ sub SetWindowTitle($)
4198
4205
  if ($curTitle ne $title) {
4199
4206
  $curTitle = $title;
4200
4207
  if ($^O eq 'MSWin32') {
4201
- $title =~ s/([&\/\?:|"<>])/^$1/g; # escape special chars
4208
+ $title =~ tr(-_a-zA-Z0-9%.+/:=?*@~)()dc; # allow only safe characters
4209
+ $title =~ s/([\/?:%])/^$1/g; # escape remaing questionable chars
4202
4210
  eval { system qq{title $title} };
4203
4211
  } else {
4204
4212
  # (this only works for XTerm terminals, and STDERR must go to the console)
@@ -4253,6 +4261,7 @@ sub ProcessFiles($;$)
4253
4261
  next if $endDir{$d};
4254
4262
  }
4255
4263
  GetImageInfo($et, $file);
4264
+ Image::ExifTool::Purge($purge) if $purge;
4256
4265
  $end and Warn("End called - $file\n");
4257
4266
  if ($endDir) {
4258
4267
  Warn("EndDir called - $file\n");
@@ -4382,6 +4391,7 @@ sub ScanDir($$;$)
4382
4391
  push(@$list, $path);
4383
4392
  } else {
4384
4393
  GetImageInfo($et, $path);
4394
+ Image::ExifTool::Purge($purge) if $purge;
4385
4395
  if ($end) {
4386
4396
  Warn("End called - $file\n");
4387
4397
  last;
@@ -5341,9 +5351,10 @@ information. Use the B<-s> option to see the tag names instead.
5341
5351
  Exclude specified tag from extracted information. Same as the B<-x> option.
5342
5352
  Group names and wildcards are permitted as described above for B<->I<TAG>.
5343
5353
  Once excluded from the output, a tag may not be re-included by a subsequent
5344
- option. May also be used following a B<-tagsFromFile> option to exclude
5345
- tags from being copied (when redirecting to another tag, it is the source
5346
- tag that should be excluded), or to exclude groups from being deleted when
5354
+ option. Also note that this excludes the tag from being used in a C<-if>
5355
+ condition. May be used following a B<-tagsFromFile> option to exclude tags
5356
+ from being copied (when redirecting to another tag, it is the source tag
5357
+ that should be excluded), or to exclude groups from being deleted when
5347
5358
  deleting all information (eg. C<-all= --exif:all> deletes all but EXIF
5348
5359
  information). But note that this will not exclude individual tags from a
5349
5360
  group delete (unless a family 2 group is specified, see note 4 below).
@@ -5601,7 +5612,7 @@ wildcards. When copying directly, the values of each matching source tag
5601
5612
  are copied individually to the destination tag (as if they were separate
5602
5613
  assignments). However, when interpolated inside a string, list items and
5603
5614
  the values of shortcut tags are concatenated (with a separator set by the
5604
- B<-sep> option), and wildcards are not allowed.Another difference is that a
5615
+ B<-sep> option), and wildcards are not allowed. Another difference is that a
5605
5616
  minor warning is generated if a tag doesn't exist when interpolating its
5606
5617
  value in a string (with C<$>), but isn't when copying the tag directly.
5607
5618
 
@@ -6136,7 +6147,7 @@ with this command:
6136
6147
 
6137
6148
  produces output like this:
6138
6149
 
6139
- -- Generated by ExifTool 13.52 --
6150
+ -- Generated by ExifTool 13.53 --
6140
6151
  File: a.jpg - 2003:10:31 15:44:19
6141
6152
  (f/5.6, 1/60s, ISO 100)
6142
6153
  File: b.jpg - 2006:05:23 11:57:38
@@ -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.66';
38
+ $VERSION = '3.67';
39
39
  @ISA = qw(Exporter);
40
40
 
41
41
  sub NumbersFirst($$);
@@ -963,6 +963,9 @@ TagID: foreach $tagID (@keys) {
963
963
  if ($$tagInfo{List} and $$tagInfo{List} !~ /^(1|Alt|Bag|Seq|array|string)$/) {
964
964
  warn "Warning: Unknown List type ($$tagInfo{List}) for $name in $tableName\n";
965
965
  }
966
+ if ($$tagInfo{Hook} and $$tagInfo{Unknown}) {
967
+ warn "Warning: Unknown tag with Hook - $short $name\n"
968
+ }
966
969
  # accumulate information for consistency check of BinaryData tables
967
970
  if ($processBinaryData and $$table{WRITABLE}) {
968
971
  # can't currently write tag if Condition accesses $valPt
@@ -16,7 +16,7 @@ use vars qw($VERSION);
16
16
  use Image::ExifTool qw(:DataAccess :Utils);
17
17
  use Image::ExifTool::JSON;
18
18
 
19
- $VERSION = '1.03';
19
+ $VERSION = '1.04';
20
20
 
21
21
  sub ProcessCBOR($$$);
22
22
  sub ReadCBORValue($$$$);
@@ -207,6 +207,7 @@ sub ReadCBORValue($$$$)
207
207
  # read next value (note: in the case of multiple tags,
208
208
  # this nesting will apply the tags in the correct order)
209
209
  ($val, $err, $pos) = ReadCBORValue($et, $dataPt, $pos, $end);
210
+ return(undef, $err, $pos) if $err;
210
211
  $dumpStart = $pos;
211
212
  # convert some values according to the optional tag number (untested)
212
213
  if ($num == 0 and not ref $val) { # date/time string
@@ -6166,6 +6166,11 @@ my %ciMaxFocal = (
6166
6166
  SeparateTable => 'UserDefStyle',
6167
6167
  PrintConv => \%userDefStyles,
6168
6168
  },
6169
+ # location of time stamp (github400)
6170
+ # 0x00ec - 1000D firmware 1.0.7, 40D firmware 1.0.8
6171
+ # 0x01b4 - 5D II firmware 1.0.6 and 1.1.0
6172
+ # 0x01b8 - 5D II firmware 2.1.2
6173
+ # 0x01bc - 7D firmware 2.0.3
6169
6174
  );
6170
6175
 
6171
6176
  # Picture Style information for the 60D, etc (ref 48)
@@ -6345,6 +6350,8 @@ my %ciMaxFocal = (
6345
6350
  SeparateTable => 'UserDefStyle',
6346
6351
  PrintConv => \%userDefStyles,
6347
6352
  },
6353
+ # location of time stamp (github400)
6354
+ # 0x01d0 - 6D firmware 1.1.6, 1D X firmware 2.1.0
6348
6355
  );
6349
6356
 
6350
6357
  # Movie information (MakerNotes tag 0x11) (ref PH)
@@ -6178,9 +6178,7 @@ sub NextOffsetName($;$)
6178
6178
 
6179
6179
  #------------------------------------------------------------------------------
6180
6180
  # Process EXIF directory
6181
- # Inputs: 0) ExifTool object reference
6182
- # 1) Reference to directory information hash
6183
- # 2) Pointer to tag table for this directory
6181
+ # Inputs: 0) ExifTool ref, 1) dirInfo ref, 2) tag table ref
6184
6182
  # Returns: 1 on success, otherwise returns 0 and sets a Warning
6185
6183
  sub ProcessExif($$$)
6186
6184
  {