exiftool_vendored 13.29.0 → 13.31.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.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/bin/Changes +43 -1
  3. data/bin/META.json +4 -3
  4. data/bin/META.yml +3 -2
  5. data/bin/README +2 -2
  6. data/bin/config_files/pix4d.config +9 -8
  7. data/bin/exiftool +14 -8
  8. data/bin/lib/Image/ExifTool/BuildTagLookup.pm +1 -1
  9. data/bin/lib/Image/ExifTool/Canon.pm +8 -3
  10. data/bin/lib/Image/ExifTool/Exif.pm +5 -2
  11. data/bin/lib/Image/ExifTool/FujiFilm.pm +5 -1
  12. data/bin/lib/Image/ExifTool/Geolocation.dat +0 -0
  13. data/bin/lib/Image/ExifTool/GoPro.pm +10 -3
  14. data/bin/lib/Image/ExifTool/LNK.pm +21 -3
  15. data/bin/lib/Image/ExifTool/Lang/de.pm +2 -1
  16. data/bin/lib/Image/ExifTool/Lang/fr.pm +2 -1
  17. data/bin/lib/Image/ExifTool/LigoGPS.pm +15 -7
  18. data/bin/lib/Image/ExifTool/MakerNotes.pm +3 -3
  19. data/bin/lib/Image/ExifTool/Nikon.pm +10 -3
  20. data/bin/lib/Image/ExifTool/Olympus.pm +5 -1
  21. data/bin/lib/Image/ExifTool/PDF.pm +1 -0
  22. data/bin/lib/Image/ExifTool/Panasonic.pm +1 -1
  23. data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
  24. data/bin/lib/Image/ExifTool/Pentax.pm +56 -14
  25. data/bin/lib/Image/ExifTool/Plot.pm +2 -3
  26. data/bin/lib/Image/ExifTool/QuickTime.pm +23 -3
  27. data/bin/lib/Image/ExifTool/QuickTimeStream.pl +51 -17
  28. data/bin/lib/Image/ExifTool/Sigma.pm +30 -4
  29. data/bin/lib/Image/ExifTool/Sony.pm +3 -3
  30. data/bin/lib/Image/ExifTool/TagLookup.pm +3738 -3729
  31. data/bin/lib/Image/ExifTool/TagNames.pod +27 -9
  32. data/bin/lib/Image/ExifTool/WritePDF.pl +1 -0
  33. data/bin/lib/Image/ExifTool/Writer.pl +128 -129
  34. data/bin/lib/Image/ExifTool.pm +11 -8
  35. data/bin/perl-Image-ExifTool.spec +1 -1
  36. data/lib/exiftool_vendored/version.rb +1 -1
  37. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 100fd830d0ad83694462874c851c5caa93a6b286d694450fba9a56286a99907d
4
- data.tar.gz: 452ee823b075cfc924180bb9df5ec0cc959bbc6659e059866c9212c62df73e3e
3
+ metadata.gz: 294fadd1a8ca95bacd65ceb7ccbe1e1bcad11e1c54be1614b2a97268f34b4fef
4
+ data.tar.gz: f9e486c3194561137b60596a608d121e6c836d2f1cbcc6377c8452d4187a2a8a
5
5
  SHA512:
6
- metadata.gz: c6682ad9ca29d84314dc4bdb142c4ce097a70b60a4b32b99e2768d57e3012c72ba7156092cc3e449e80dc80355101d43185b3f8583f16cd09e6bbb33e742b75e
7
- data.tar.gz: 1d735972885fb37be03d9995f8c5fb146c786fc75b3314d7f70b004308d0a6ffd7086782e5a0ccf5cd58758ccc590354e6a7143bc1d84e761d4c96df4770aebc
6
+ metadata.gz: c7432115839881c5b0076b2ae50264ccceb0de022923b9c7cfe1a0f1aec10a019c111d92f6beb7420e3b24b54852495acdb9e380b47837228771dfb446a582d5
7
+ data.tar.gz: fa0028c4e342601dc7ee84a823c94f728a9ef04a2fdc93ae131ae0cb73259571377916ea88802af733012a442d6581f9edbdf3d851516eda289d18181ee61aa2
data/bin/Changes CHANGED
@@ -4,9 +4,49 @@ ExifTool Version History
4
4
 
5
5
  RSS feed: https://exiftool.org/rss.xml
6
6
 
7
- Note: The most recent production release is Version 13.25. (Other versions are
7
+ Note: The most recent production release is Version 13.30. (Other versions are
8
8
  considered development releases, and are not uploaded to MetaCPAN.)
9
9
 
10
+ June 19, 2025 - Version 13.31
11
+
12
+ - Added a new CanonModelID and RFLensType (thanks Norbert Wasser)
13
+ - Added some new FujiFilm AdvancedFilter values (thanks Greybeard)
14
+ - Added a new Nikon Z LensID (thanks Warren Hatch)
15
+ - Decode a few new Sigma tags
16
+ - Decode two more types of timed GPS from MP4 videos
17
+ - Decode more Pentax AF tags for some models (thanks Karsten Gieselmann)
18
+ - Extract Pages MediaBox from PDF files (github #333)
19
+ - Enhanced Validate feature to check some embedded images
20
+ - Remove sub-seconds if they exist when writing a PDF date
21
+ - Removed a debugging warning left in the -plot update of 13.28
22
+ - Changed DNG ProfileIFD RGBTables to Binary-type tag (github #334)
23
+ - Internal code improvements in the handling of some trailers
24
+ - Patched LNK string parsing for Windows nonconformity (github #332)
25
+ - Fixed a few possible "uninitialized value" warnings
26
+
27
+ May 22, 2025 - Version 13.30 (production release)
28
+
29
+ - Added a new Canon RF lens (thanks Norbert Wasser)
30
+ - Added some new Olympus ArtFilter values
31
+ - Added support for reading timed GPS from Transcend Drive Body Camera 70 MP4
32
+ videos
33
+ - Added a new FujiFilm AdvancedFilter value (thanks Greybeard)
34
+ - Decode maker notes from Sigma BF images
35
+ - Decode a few more Pentax AF-related tags (thanks Karsten Gieselmann)
36
+ - Extract PreviewImage and its metadata from Sigma BF MOV videos
37
+ - Allow multiple config files to be specified on the command line (but leave
38
+ undocumented for now because the config files currently included in the full
39
+ ExifTool package aren't compatible with this feature)
40
+ - Removed warning introduced in version 12.60 for an undefined tag in a -if
41
+ condition, but leave the 12.60 change that sets these tags to an empty
42
+ string when -m is used
43
+ - Patched LensID conversion to better handle a manual lens on a Sony ILCE-7M2
44
+ - Patched to avoid runtime warning when using -fast option and reading and
45
+ HEIC file via a pipe (but you will still get a seek error)
46
+ - Fixed some tag format types in the config_files/pix4d.config file
47
+ - Fixed possible "uninitialized value" warning when reading some types of Ligo
48
+ timed GPS
49
+
10
50
  Apr. 27, 2025 - Version 13.29
11
51
 
12
52
  - Changed default -geotime argument to use SubSecDateTimeOriginal if available
@@ -27,6 +67,8 @@ Apr. 25, 2025 - Version 13.28
27
67
  - Decode ShutterCount for Canon EOS R8 and R50 (github #325)
28
68
  - Decode ThumbnailTIFF from some Insta360 videos
29
69
  - Decode AROT:HDRGainCurveSize from APP10
70
+ - Enhanced the -plot feature to allow Multi option to specify a different
71
+ number of datasets for each plot
30
72
  - Updated to the 2025 MPF specification
31
73
  - Renamed K-3III AFPoints to AFPointsSelected and changed decoding
32
74
  - Fixed bug introduced in 13.23 that could cause an incorrect parsing of XMP
data/bin/META.json CHANGED
@@ -4,13 +4,13 @@
4
4
  "Phil Harvey (philharvey66 at gmail.com)"
5
5
  ],
6
6
  "dynamic_config" : 1,
7
- "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240",
7
+ "generated_by" : "ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version 2.150010",
8
8
  "license" : [
9
9
  "perl_5"
10
10
  ],
11
11
  "meta-spec" : {
12
12
  "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
13
- "version" : "2"
13
+ "version" : 2
14
14
  },
15
15
  "name" : "Image-ExifTool",
16
16
  "no_index" : {
@@ -50,5 +50,6 @@
50
50
  }
51
51
  },
52
52
  "release_status" : "stable",
53
- "version" : "13.29"
53
+ "version" : "13.31",
54
+ "x_serialization_backend" : "JSON::PP version 4.06"
54
55
  }
data/bin/META.yml CHANGED
@@ -7,7 +7,7 @@ build_requires:
7
7
  configure_requires:
8
8
  ExtUtils::MakeMaker: '0'
9
9
  dynamic_config: 1
10
- generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.143240'
10
+ generated_by: 'ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version 2.150010'
11
11
  license: perl
12
12
  meta-spec:
13
13
  url: http://module-build.sourceforge.net/META-spec-v1.4.html
@@ -31,4 +31,5 @@ recommends:
31
31
  Time::HiRes: '0'
32
32
  requires:
33
33
  perl: '5.004'
34
- version: '13.29'
34
+ version: '13.31'
35
+ x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
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-13.29.tar.gz | tar -xf -
113
- cd Image-ExifTool-13.29
112
+ gzip -dc Image-ExifTool-13.31.tar.gz | tar -xf -
113
+ cd Image-ExifTool-13.31
114
114
  ./exiftool t/images/ExifTool.jpg
115
115
 
116
116
  Note: These commands extract meta information from one of the test images.
@@ -8,10 +8,11 @@
8
8
  #
9
9
  # Requires: ExifTool version 7.00 or later
10
10
  #
11
- # References: 1) https://support.pix4d.com/hc/en-us/articles/360016450032-Specifications-of-xmpcamera-tags
11
+ # References: 1) https://support.pix4d.com/hc/en-us/articles/360016450032
12
12
  #
13
13
  # Revisions: 2017/12/08 - P. Harvey Created
14
14
  # 2020/04/02 - PH Updated to current specification
15
+ # 2025/05/01 - PH Changed some Writable types to match the spec
15
16
  #------------------------------------------------------------------------------
16
17
 
17
18
  %Image::ExifTool::UserDefined = (
@@ -40,8 +41,8 @@
40
41
  PerspectiveFocalLength => { Writable => 'real' },
41
42
  PerspectiveDistortion => { },
42
43
  IMULinearVelocity => { },
43
- GPSXYAccuracy => { Writable => 'real' },
44
- GPSZAccuracy => { Writable => 'real' },
44
+ GPSXYAccuracy => { Writable => 'rational' },
45
+ GPSZAccuracy => { Writable => 'rational' },
45
46
  FlightUUID => { },
46
47
  CentralWaveLength => { },
47
48
  BandName => { List => 'Seq' },
@@ -77,11 +78,11 @@
77
78
  Albedo => { List => 'Seq' },
78
79
  ReflectArea => { List => 'Seq' },
79
80
  CalibrationPicture => { Writable => 'integer' },
80
- GyroRate => { Writable => 'real' },
81
- IMUPitchAccuracy => { Writable => 'real' },
82
- IMURollAccuracy => { Writable => 'real' },
83
- IMUYawAccuracy => { Writable => 'real' },
84
- NominalCameraDistance => { Writable => 'real' },
81
+ GyroRate => { Writable => 'rational' },
82
+ IMUPitchAccuracy => { Writable => 'rational' },
83
+ IMURollAccuracy => { Writable => 'rational' },
84
+ IMUYawAccuracy => { Writable => 'rational' },
85
+ NominalCameraDistance => { Writable => 'rational' },
85
86
  AboveGroundAltitude => { Writable => 'real' },
86
87
  SunSensorYaw => { Writable => 'real' },
87
88
  SunSensorPitch => { Writable => 'real' },
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.29';
14
+ my $version = '13.31';
15
15
 
16
16
  $^W = 1; # enable global warnings
17
17
 
@@ -35,9 +35,9 @@ BEGIN {
35
35
  # add lib directory at start of include path
36
36
  unshift @INC, $incDir;
37
37
  # load or disable config file if specified
38
- if (@ARGV and lc($ARGV[0]) eq '-config') {
38
+ while (@ARGV and lc($ARGV[0]) eq '-config') {
39
39
  shift;
40
- $Image::ExifTool::configFile = shift;
40
+ push @Image::ExifTool::configFiles, shift;
41
41
  }
42
42
  }
43
43
  use Image::ExifTool qw{:Public};
@@ -5595,7 +5595,9 @@ Output requested metadata in binary format without tag names or descriptions
5595
5595
  images or other binary data, but it may also be useful for some text strings
5596
5596
  since control characters (such as newlines) are not replaced by '.' as they
5597
5597
  are in the default output. By default, list items are separated by a
5598
- newline when extracted with the B<-b> option, but this may be changed (see
5598
+ newline when extracted with the B<-b> option and no terminator is added
5599
+ after each tag value, but the list separator may be changed with a B<-sep>
5600
+ option and a terminator may be set by adding a second B<-sep> option (see
5599
5601
  the B<-sep> option for details). May be combined with B<-j>, B<-php> or
5600
5602
  B<-X> to extract binary data in JSON, PHP or XML format, but note that
5601
5603
  "Unsafe" tags are not extracted as binary unless they are specified
@@ -6052,7 +6054,7 @@ with this command:
6052
6054
 
6053
6055
  produces output like this:
6054
6056
 
6055
- -- Generated by ExifTool 13.29 --
6057
+ -- Generated by ExifTool 13.31 --
6056
6058
  File: a.jpg - 2003:10:31 15:44:19
6057
6059
  (f/5.6, 1/60s, ISO 100)
6058
6060
  File: b.jpg - 2006:05:23 11:57:38
@@ -6863,9 +6865,10 @@ otherwise family 0 is assumed. The B<-l> or B<-v> option may be combined
6863
6865
  with B<-listf>, B<-listr> or B<-listwf> to add file descriptions to the
6864
6866
  list. The B<-lang> option may be combined with B<-listx> to output
6865
6867
  descriptions in a single language, and the B<-sort> and/or B<-lang> options
6866
- may be combined with B<-listgeo>. Also, the API GeolocMinPop, GeolocFeature
6867
- and GeolocAltNames options apply to the B<-listgeo> output. Here are some
6868
- examples:
6868
+ may be combined with B<-listgeo> (installation of the alternate database is
6869
+ required for the additional languages). Also, the API GeolocMinPop,
6870
+ GeolocFeature and GeolocAltNames options apply to the B<-listgeo> output.
6871
+ Here are some examples:
6869
6872
 
6870
6873
  -list # list all tag names
6871
6874
  -list -EXIF:All # list all EXIF tags
@@ -7150,6 +7153,9 @@ accessing tags from the corresponding C<FileNUM> group.
7150
7153
  User-defined Composite tags may access tags from alternate files using the
7151
7154
  appropriate (case-sensitive) family 8 group name.
7152
7155
 
7156
+ The B<-fast> option, if used, also applies to processing of the alternate
7157
+ files.
7158
+
7153
7159
  =item B<-list_dir>
7154
7160
 
7155
7161
  List directories themselves instead of their contents. This option
@@ -995,7 +995,7 @@ TagID: foreach $tagID (@keys) {
995
995
  if ($format and $format =~ /\$val\{/ and
996
996
  ($$tagInfo{Writable} or not defined $$tagInfo{Writable}))
997
997
  {
998
- warn "Warning: \$var{} used in Format of writable tag - $short $name\n"
998
+ warn "Warning: \$val{} used in Format of writable tag - $short $name\n"
999
999
  }
1000
1000
  }
1001
1001
  if ($$tagInfo{Hidden}) {
@@ -88,7 +88,7 @@ sub ProcessCTMD($$$);
88
88
  sub ProcessExifInfo($$$);
89
89
  sub SwapWords($);
90
90
 
91
- $VERSION = '4.90';
91
+ $VERSION = '4.92';
92
92
 
93
93
  # Note: Removed 'USM' from 'L' lenses since it is redundant - PH
94
94
  # (or is it? Ref 32 shows 5 non-USM L-type lenses)
@@ -636,8 +636,10 @@ $VERSION = '4.90';
636
636
  '61182.58' => 'Canon RF 70-200mm F2.8 L IS USM Z + RF1.4x', #42
637
637
  '61182.59' => 'Canon RF 70-200mm F2.8 L IS USM Z + RF2x', #42
638
638
  '61182.60' => 'Canon RF 16-28mm F2.8 IS STM', #42
639
- '61182.61' => 'Canon RF 50mm F1.4 L VCM', #42
640
- '61182.62' => 'Canon RF 24mm F1.4 L VCM', #42
639
+ '61182.61' => 'Canon RF-S 14-30mm F4-6.3 IS STM PZ', #42
640
+ '61182.62' => 'Canon RF 50mm F1.4 L VCM', #42
641
+ '61182.63' => 'Canon RF 24mm F1.4 L VCM', #42
642
+ '61182.64' => 'Canon RF 20mm F1.4 L VCM', #42
641
643
  65535 => 'n/a',
642
644
  );
643
645
 
@@ -1005,6 +1007,7 @@ $VERSION = '4.90';
1005
1007
  0x80000495 => 'EOS R1', #PH
1006
1008
  0x80000496 => 'R5 Mark II', #forum16406
1007
1009
  0x80000498 => 'EOS R100', #25
1010
+ 0x80000516 => 'EOS R50 V', #42
1008
1011
  0x80000520 => 'EOS D2000C', #IB
1009
1012
  0x80000560 => 'EOS D6000C', #PH (guess)
1010
1013
  );
@@ -7031,8 +7034,10 @@ my %ciMaxFocal = (
7031
7034
  320 => 'Canon RF 70-200mm F2.8 L IS USM Z + RF1.4x', #42
7032
7035
  321 => 'Canon RF 70-200mm F2.8 L IS USM Z + RF2x', #42
7033
7036
  323 => 'Canon RF 16-28mm F2.8 IS STM', #42
7037
+ 324 => 'Canon RF-S 14-30mm F4-6.3 IS STM PZ', #42
7034
7038
  325 => 'Canon RF 50mm F1.4 L VCM', #42
7035
7039
  326 => 'Canon RF 24mm F1.4 L VCM', #42
7040
+ 327 => 'Canon RF 20mm F1.4 L VCM', #42
7036
7041
  # Note: add new RF lenses to %canonLensTypes with ID 61182
7037
7042
  },
7038
7043
  },
@@ -57,7 +57,7 @@ use vars qw($VERSION $AUTOLOAD @formatSize @formatName %formatNumber %intFormat
57
57
  use Image::ExifTool qw(:DataAccess :Utils);
58
58
  use Image::ExifTool::MakerNotes;
59
59
 
60
- $VERSION = '4.56';
60
+ $VERSION = '4.58';
61
61
 
62
62
  sub ProcessExif($$$);
63
63
  sub WriteExif($$$);
@@ -2081,7 +2081,7 @@ my %opcodeInfo = (
2081
2081
  0x8822 => {
2082
2082
  Name => 'ExposureProgram',
2083
2083
  Groups => { 2 => 'Camera' },
2084
- Notes => 'the value of 9 is not standard EXIF, but is used by the Canon EOS 7D',
2084
+ Notes => 'the value of 9 is not standard EXIF, but is used by some Canon models',
2085
2085
  Writable => 'int16u',
2086
2086
  PrintConv => {
2087
2087
  0 => 'Not Defined',
@@ -4350,6 +4350,7 @@ my %opcodeInfo = (
4350
4350
  Writable => 'undef',
4351
4351
  WriteGroup => 'IFD0',
4352
4352
  Protected => 1,
4353
+ Binary => 1,
4353
4354
  },
4354
4355
  0xcd40 => { # DNG 1.7
4355
4356
  Name => 'ProfileGainTableMap2',
@@ -5804,6 +5805,8 @@ sub PrintLensID($$@)
5804
5805
  }
5805
5806
  if ($$et{Make} eq 'SONY') {
5806
5807
  if ($lensType eq 65535) {
5808
+ # patch for manual lens (forum17379)
5809
+ return $$printConv{$lensType} if $$printConv{$lensType} and not $focalLength and $maxAperture == 1;
5807
5810
  # handle Sony E-type lenses when LensType2 isn't valid (NEX/ILCE models only)
5808
5811
  if ($$et{Model} =~ /NEX|ILCE/) {
5809
5812
  unless (%sonyEtype) {
@@ -31,7 +31,7 @@ use vars qw($VERSION);
31
31
  use Image::ExifTool qw(:DataAccess :Utils);
32
32
  use Image::ExifTool::Exif;
33
33
 
34
- $VERSION = '1.96';
34
+ $VERSION = '1.97';
35
35
 
36
36
  sub ProcessFujiDir($$$);
37
37
  sub ProcessFaceRec($$$);
@@ -628,6 +628,10 @@ my %faceCategories = (
628
628
  0x60006 => 'Partial Color Purple',
629
629
  0x70000 => 'Soft Focus',
630
630
  0x90000 => 'Low Key',
631
+ 0x100000 => 'Light Leak', #forum17392
632
+ 0x130000 => 'Expired Film Green', #forum17392
633
+ 0x130001 => 'Expired Film Red', #forum17392 (NC)
634
+ 0x130002 => 'Expired Film Neutral', #forum17392
631
635
  },
632
636
  },
633
637
  0x1210 => { #2
Binary file
@@ -17,7 +17,7 @@ use vars qw($VERSION);
17
17
  use Image::ExifTool qw(:DataAccess :Utils);
18
18
  use Image::ExifTool::QuickTime;
19
19
 
20
- $VERSION = '1.12';
20
+ $VERSION = '1.13';
21
21
 
22
22
  sub ProcessGoPro($$$);
23
23
  sub ProcessString($$$);
@@ -762,7 +762,7 @@ sub ProcessString($$$)
762
762
  }
763
763
 
764
764
  #------------------------------------------------------------------------------
765
- # Process "GP\x06\0" records in MP4 'mdat'atom
765
+ # Process "GP\x06\0" records in MP4 'mdat' atom
766
766
  # Inputs: 0) ExifTool object ref, 1) dirInfo ref (RAF and DirLen)
767
767
  # Returns: size of GoPro record, or 0 on error
768
768
  sub ProcessGP6($$)
@@ -815,9 +815,16 @@ sub ProcessGoPro($$$)
815
815
 
816
816
  for (; $pos+8<=$dirEnd; $pos+=($size+3)&0xfffffffc) {
817
817
  my ($tag,$fmt,$len,$count) = unpack("x${pos}a4CCn", $$dataPt);
818
+ if ($tag =~ /[^-_a-zA-Z0-9 ]/) {
819
+ $et->Warn('Unrecognized GoPro record') unless $tag eq "\0\0\0\0";
820
+ last;
821
+ }
818
822
  $size = $len * $count;
819
823
  $pos += 8;
820
- last if $pos + $size > $dirEnd;
824
+ if ($pos + $size > $dirEnd) {
825
+ $et->Warn('Truncated GoPro record');
826
+ last;
827
+ }
821
828
  my $tagInfo = $et->GetTagInfo($tagTablePtr, $tag);
822
829
  last if $tag eq "\0\0\0\0"; # stop at null tag
823
830
  next unless $size or $verbose; # don't save empty values unless verbose
@@ -7,6 +7,7 @@
7
7
  #
8
8
  # References: 1) http://msdn.microsoft.com/en-us/library/dd871305(PROT.10).aspx
9
9
  # 2) http://www.i2s-lab.com/Papers/The_Windows_Shortcut_File_Format.pdf
10
+ # 3) https://harfanglab.io/insidethelab/sadfuture-xdspy-latest-evolution/#tid_specifications_ignored
10
11
  #------------------------------------------------------------------------------
11
12
 
12
13
  package Image::ExifTool::LNK;
@@ -15,7 +16,7 @@ use strict;
15
16
  use vars qw($VERSION);
16
17
  use Image::ExifTool qw(:DataAccess :Utils);
17
18
 
18
- $VERSION = '1.09';
19
+ $VERSION = '1.10';
19
20
 
20
21
  sub ProcessItemID($$$);
21
22
  sub ProcessLinkInfo($$$);
@@ -647,17 +648,32 @@ sub ProcessLNK($$)
647
648
  my @strings = qw(Description RelativePath WorkingDirectory
648
649
  CommandLineArguments IconFileName);
649
650
  for ($i=0; $i<@strings; ++$i) {
651
+ my ($val, $limit);
650
652
  my $mask = 0x04 << $i;
651
653
  next unless $flags & $mask;
652
654
  $raf->Read($buff, 2) or return 1;
655
+ my $pos = $raf->Tell();
653
656
  $len = unpack('v', $buff) or next;
657
+ # Windows doesn't follow their own specification and limits the length
658
+ # for most of these strings (ref 3)
659
+ if ($i != 3 and $len >= 260) {
660
+ $limit = 1;
661
+ if ($len > 260) {
662
+ $len = 260;
663
+ $et->Warn('LNK string data overrun! Possible security issue');
664
+ }
665
+ }
654
666
  $len *= 2 if $flags & 0x80; # characters are 2 bytes if Unicode flag is set
655
667
  $raf->Read($buff, $len) or return 1;
656
- my $val;
668
+ # remove last character if string is at length limit (Windows treats this as a null)
669
+ if ($limit) {
670
+ $len -= $flags & 0x80 ? 2 : 1;
671
+ $buff = substr($buff, 0, $len);
672
+ }
657
673
  $val = $et->Decode($buff, 'UCS2') if $flags & 0x80;
658
674
  $et->HandleTag($tagTablePtr, 0x30000 | $mask, $val,
659
675
  DataPt => \$buff,
660
- DataPos => $raf->Tell() - $len,
676
+ DataPos => $pos,
661
677
  Size => $len,
662
678
  );
663
679
  }
@@ -716,6 +732,8 @@ under the same terms as Perl itself.
716
732
 
717
733
  =item L<http://www.i2s-lab.com/Papers/The_Windows_Shortcut_File_Format.pdf>
718
734
 
735
+ =item L<https://harfanglab.io/insidethelab/sadfuture-xdspy-latest-evolution/#tid_specifications_ignored>
736
+
719
737
  =back
720
738
 
721
739
  =head1 SEE ALSO
@@ -11,7 +11,7 @@ package Image::ExifTool::Lang::de;
11
11
  use strict;
12
12
  use vars qw($VERSION);
13
13
 
14
- $VERSION = '1.37';
14
+ $VERSION = '1.38';
15
15
 
16
16
  %Image::ExifTool::Lang::de::Translate = (
17
17
  'AEAperture' => 'AE-Blende',
@@ -5126,6 +5126,7 @@ $VERSION = '1.37';
5126
5126
  'LensType' => {
5127
5127
  Description => 'Objektivtyp',
5128
5128
  PrintConv => {
5129
+ 'None' => 'Keiner',
5129
5130
  'Uncoded lens' => 'Nicht kodiertes Objektiv',
5130
5131
  },
5131
5132
  },
@@ -11,7 +11,7 @@ package Image::ExifTool::Lang::fr;
11
11
  use strict;
12
12
  use vars qw($VERSION);
13
13
 
14
- $VERSION = '1.36';
14
+ $VERSION = '1.37';
15
15
 
16
16
  %Image::ExifTool::Lang::fr::Translate = (
17
17
  'AEAperture' => 'Ouverture AE',
@@ -6607,6 +6607,7 @@ $VERSION = '1.36';
6607
6607
  'LensType' => {
6608
6608
  Description => 'Type d\'objectif',
6609
6609
  PrintConv => {
6610
+ 'None' => 'Aucun',
6610
6611
  'n/a' => 'Non applicable',
6611
6612
  'smc PENTAX-F 100-300mm F4.5-5.6 or Sigma Lens' => 'smc PENTAX-F 100-300mm F4.5-5.6 ou objectif Sigma',
6612
6613
  'smc PENTAX-F 28-80mm F3.5-4.5 or Tokina Lens' => 'smc PENTAX-F 28-80mm F3.5-4.5 ou objectif Tokina',
@@ -11,7 +11,7 @@ use strict;
11
11
  use vars qw($VERSION);
12
12
  use Image::ExifTool;
13
13
 
14
- $VERSION = '1.04';
14
+ $VERSION = '1.06';
15
15
 
16
16
  sub ProcessLigoGPS($$$;$);
17
17
  sub ProcessLigoJSON($$$);
@@ -223,11 +223,12 @@ sub DecipherLigoGPS($$$;$)
223
223
  #------------------------------------------------------------------------------
224
224
  # Parse decrypted/deciphered (but not defuzzed) LIGOGPSINFO record
225
225
  # (record starts with 4-byte int32u counter followed by date/time, etc)
226
- # Inputs: 0) ExifTool ref, 1) GPS string, 2) tag table ref, 3) not fuzzed
226
+ # Inputs: 0) ExifTool ref, 1) GPS string, 2) tag table ref,
227
+ # 3) flags: 0x01=not fuzzed, 0x02=spd in km/h
227
228
  # Returns: nothing
228
229
  sub ParseLigoGPS($$$;$)
229
230
  {
230
- my ($et, $str, $tagTbl, $noFuzz) = @_;
231
+ my ($et, $str, $tagTbl, $flags) = @_;
231
232
 
232
233
  # example string input
233
234
  # "....2022/09/19 12:45:24 N:31.285065 W:124.759483 46.93 km/h x:-0.000 y:-0.000 z:-0.000"
@@ -235,15 +236,16 @@ sub ParseLigoGPS($$$;$)
235
236
  $et->Warn('LIGOGPSINFO format error');
236
237
  return;
237
238
  }
239
+ $flags or $flags = 0;
238
240
  my ($time,$latRef,$latNeg,$lat,$lonRef,$lonNeg,$lon,$spd) = ($1,$2,$3,$4,$5,$6,$7,$8);
239
241
  my %gpsScl = ( 1 => 1.524855137, 2 => 1.456027985, 3 => 1.15368 );
240
- my $spdScl = $noFuzz ? $knotsToKph : 1.85407333;
242
+ my $spdScl = $flags & 0x01 ? ($flags & 0x02 ? 1 : $knotsToKph) : 1.85407333;
241
243
  $$et{DOC_NUM} = ++$$et{DOC_COUNT};
242
244
  $time =~ tr(/)(:);
243
245
  # convert from DDMM.MMMMMM to DD.DDDDDD if necessary
244
246
  # (speed wasn't scaled in my 1 sample with this format)
245
247
  $lat =~ /^\d{3}/ and Image::ExifTool::QuickTime::ConvertLatLon($lat,$lon), $spdScl = 1;
246
- unless ($noFuzz) { # unfuzz the coordinates if necessary
248
+ unless ($flags & 0x01) { # unfuzz the coordinates if necessary
247
249
  my $scl = $$et{OPTIONS}{LigoGPSScale} || $$et{LigoGPSScale} || 1;
248
250
  $scl = $gpsScl{$scl} if $gpsScl{$scl};
249
251
  ($lat, $lon) = UnfuzzLigoGPS($lat, $lon, $scl);
@@ -298,7 +300,13 @@ sub ProcessLigoGPS($$$;$)
298
300
  $et->VerboseDir($dirName);
299
301
  for (; $pos + 0x84 <= length($$dataPt); $pos+=0x84) {
300
302
  my $dat = substr($$dataPt, $pos, 0x84);
301
- $dat =~ /^####/ or next; # (have seen blank records filled with zeros, so keep trying)
303
+ unless ($dat =~ /^####/) {
304
+ next unless $dat =~ m(^.{4}\d{4}/\d{2}/\d{2} )s; # (have seen blank records filled with zeros, so keep trying)
305
+ # non-encrypted format written by Redtiger F9 4K
306
+ $dat =~ s/\0+$//; # remove trailing nulls
307
+ ParseLigoGPS($et, $dat, $tagTbl, 0x03);
308
+ next;
309
+ }
302
310
  # decipher if we already know the encryption
303
311
  $cipherInfo and $$cipherInfo{decipher} and DecipherLigoGPS($et, $dat, $tagTbl, $noFuzz) and next;
304
312
  my $str = DecryptLigoGPS($dat);
@@ -329,7 +337,7 @@ sub ProcessLigoJSON($$$)
329
337
  my $dataPt = $$dirInfo{DataPt};
330
338
  my $dirLen = $$dirInfo{DirLen};
331
339
  require Image::ExifTool::Import;
332
- $et->VerboseDir('LIGO_JSON', undef, length($$dataPt) - pos($$dataPt));
340
+ $et->VerboseDir('LIGO_JSON', undef, length($$dataPt) - (pos($$dataPt) || 0));
333
341
  $$et{SET_GROUP1} = 'LIGO';
334
342
  while ($$dataPt =~ /LIGOGPSINFO (\{.*?\})/g) {
335
343
  my $json = $1;
@@ -21,7 +21,7 @@ sub ProcessKodakPatch($$$);
21
21
  sub WriteUnknownOrPreview($$$);
22
22
  sub FixLeicaBase($$;$);
23
23
 
24
- $VERSION = '2.16';
24
+ $VERSION = '2.17';
25
25
 
26
26
  my $debug; # set to 1 to enable debugging code
27
27
 
@@ -991,9 +991,9 @@ my $debug; # set to 1 to enable debugging code
991
991
  {
992
992
  Name => 'MakerNoteSigma',
993
993
  Condition => q{
994
- return undef unless $$self{Make}=~/^(SIGMA|FOVEON)/;
994
+ return undef unless $$self{Make}=~/^(SIGMA|FOVEON)/i;
995
995
  # save version number in "MakerNoteSigmaVer" member variable
996
- $$self{MakerNoteSigmaVer} = $$valPt=~/^SIGMA\0\0\0\0(.)/ ? ord($1) : -1;
996
+ $$self{MakerNoteSigmaVer} = $$valPt=~/^SIGMA\0\0\0.(.)/s ? ord($1) : -1;
997
997
  return 1;
998
998
  },
999
999
  SubDirectory => {
@@ -65,7 +65,7 @@ use Image::ExifTool::Exif;
65
65
  use Image::ExifTool::GPS;
66
66
  use Image::ExifTool::XMP;
67
67
 
68
- $VERSION = '4.46';
68
+ $VERSION = '4.47';
69
69
 
70
70
  sub LensIDConv($$$);
71
71
  sub ProcessNikonAVI($$$);
@@ -5856,6 +5856,7 @@ my %nikonFocalConversions = (
5856
5856
  46 => 'Nikkor Z 135mm f/1.8 S Plena', #28
5857
5857
  47 => 'Nikkor Z 35mm f/1.2 S', #28
5858
5858
  48 => 'Nikkor Z 28-400mm f/4-8 VR', #30
5859
+ 49 => 'Nikkor Z 28-135mm f/4 PZ', #28
5859
5860
  51 => 'Nikkor Z 35mm f/1.4', #28
5860
5861
  52 => 'Nikkor Z 50mm f/1.4', #28
5861
5862
  2305 => 'Laowa FFII 10mm F2.8 C&D Dreamer', #30
@@ -12791,7 +12792,7 @@ my %nikonFocalConversions = (
12791
12792
  Name => 'UnknownInfo',
12792
12793
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::UnknownInfo' },
12793
12794
  },
12794
- # 0x200002d - int16u[3]: "512 0 0"
12795
+ # 0x200002d - int16u[3]: "512 0 0", "512 1 14", "512 3 10"
12795
12796
  0x2000032 => {
12796
12797
  Name => 'UnknownInfo2',
12797
12798
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::UnknownInfo2' },
@@ -12804,10 +12805,12 @@ my %nikonFocalConversions = (
12804
12805
  # 0x200003f - rational64s[2]: "0 0"
12805
12806
  # 0x2000042 - undef[6]: "0100\x03\0"
12806
12807
  # 0x2000043 - undef[12]: all zeros
12808
+ # 0x200004d - undef[84]: "0100\0\0\0\0x020100\0\0\0\x010100\0\0\0\x05\0\0\..."
12807
12809
  0x200004e => {
12808
12810
  Name => 'NikonSettings',
12809
12811
  SubDirectory => { TagTable => 'Image::ExifTool::NikonSettings::Main' },
12810
12812
  },
12813
+ # 0x2000055 - undef[8]: "0100\x01\0\0\0"
12811
12814
  0x2000083 => {
12812
12815
  Name => 'LensType',
12813
12816
  # credit to Tom Christiansen (ref 7) for figuring this out...
@@ -13011,7 +13014,11 @@ my %nikonFocalConversions = (
13011
13014
  Condition => '$$valPt =~ /^040[012]/',
13012
13015
  SubDirectory => { TagTable => 'Image::ExifTool::Nikon::AFInfo2V0400' },
13013
13016
  }],
13014
- # 0x20000c0 - undef[8]
13017
+ # 0x20000c0 - undef[8]:
13018
+ # 34 01 0c 00 90 01 0c 00
13019
+ # 34 01 0c 00 9c 01 0c 00
13020
+ # 3c 01 0c 00 9c 01 0c 00
13021
+ # 3c 01 0c 00 a8 01 0c 00
13015
13022
  0x20000c3 => {
13016
13023
  Name => 'BarometerInfo',
13017
13024
  SubDirectory => {
@@ -40,7 +40,7 @@ use Image::ExifTool qw(:DataAccess :Utils);
40
40
  use Image::ExifTool::Exif;
41
41
  use Image::ExifTool::APP12;
42
42
 
43
- $VERSION = '2.85';
43
+ $VERSION = '2.86';
44
44
 
45
45
  sub PrintLensInfo($$$);
46
46
 
@@ -550,6 +550,7 @@ my %filters = (
550
550
  4 => 'Light Tone',
551
551
  5 => 'Pin Hole', # (SZ-10 magic filter 2,SZ-31MR,E-PL3)
552
552
  6 => 'Grainy Film',
553
+ 8 => 'Underwater', #forum17348
553
554
  9 => 'Diorama',
554
555
  10 => 'Cross Process',
555
556
  12 => 'Fish Eye', # (SZ-10 magic filter 3)
@@ -581,6 +582,9 @@ my %filters = (
581
582
  39 => 'Partial Color', #forum6269
582
583
  40 => 'Partial Color II', #forum6269
583
584
  41 => 'Partial Color III', #forum6269
585
+ 42 => 'Bleach Bypass', #forum17348
586
+ 43 => 'Bleach Bypass II', #forum17348
587
+ 44 => 'Instant Film', #forum17348
584
588
  );
585
589
 
586
590
  my %toneLevelType = (
@@ -234,6 +234,7 @@ my %supportedFilter = (
234
234
  Kids => {
235
235
  SubDirectory => { TagTable => 'Image::ExifTool::PDF::Kids' },
236
236
  },
237
+ MediaBox => { Name => 'MediaBox', List => 1 },
237
238
  );
238
239
 
239
240
  # tags in PDF Perms dictionary
@@ -1439,7 +1439,7 @@ my %shootingMode = (
1439
1439
  0xde => { #forum17299
1440
1440
  Name => 'AFAreaSize',
1441
1441
  Writable => 'rational64u',
1442
- Notes => 'relative to size of image',
1442
+ Notes => 'relative to size of image. "n/a" for manual focus',
1443
1443
  Count => 2,
1444
1444
  PrintConv => '$val =~ /^4194303.999/ ? "n/a" : $val',
1445
1445
  PrintConvInv => '$val eq "n/a" ? "4194303.999 4194303.999" : $val',