exiftool_vendored 13.10.0 → 13.12.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 +4 -4
- data/bin/Changes +33 -0
- data/bin/MANIFEST +1 -0
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +3 -3
- data/bin/exiftool +206 -148
- data/bin/lib/File/RandomAccess.pm +1 -1
- data/bin/lib/File/RandomAccess.pod +2 -2
- data/bin/lib/Image/ExifTool/AAC.pm +1 -1
- data/bin/lib/Image/ExifTool/AES.pm +1 -1
- data/bin/lib/Image/ExifTool/AFCP.pm +1 -1
- data/bin/lib/Image/ExifTool/AIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/APE.pm +1 -1
- data/bin/lib/Image/ExifTool/APP12.pm +1 -1
- data/bin/lib/Image/ExifTool/ASF.pm +1 -1
- data/bin/lib/Image/ExifTool/Apple.pm +1 -1
- data/bin/lib/Image/ExifTool/Audible.pm +1 -1
- data/bin/lib/Image/ExifTool/BMP.pm +1 -1
- data/bin/lib/Image/ExifTool/BPG.pm +1 -1
- data/bin/lib/Image/ExifTool/BZZ.pm +1 -1
- data/bin/lib/Image/ExifTool/BigTIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +6 -6
- data/bin/lib/Image/ExifTool/CBOR.pm +1 -1
- data/bin/lib/Image/ExifTool/Canon.pm +8 -4
- data/bin/lib/Image/ExifTool/CanonCustom.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/CanonVRD.pm +1 -1
- data/bin/lib/Image/ExifTool/CaptureOne.pm +1 -1
- data/bin/lib/Image/ExifTool/Casio.pm +1 -1
- data/bin/lib/Image/ExifTool/Charset.pm +1 -1
- data/bin/lib/Image/ExifTool/DICOM.pm +1 -1
- data/bin/lib/Image/ExifTool/DJI.pm +96 -45
- data/bin/lib/Image/ExifTool/DNG.pm +1 -1
- data/bin/lib/Image/ExifTool/DPX.pm +1 -1
- data/bin/lib/Image/ExifTool/DV.pm +1 -1
- data/bin/lib/Image/ExifTool/DarwinCore.pm +1 -1
- data/bin/lib/Image/ExifTool/DjVu.pm +1 -1
- data/bin/lib/Image/ExifTool/EXE.pm +123 -32
- data/bin/lib/Image/ExifTool/Exif.pm +7 -4
- data/bin/lib/Image/ExifTool/FITS.pm +1 -1
- data/bin/lib/Image/ExifTool/FLAC.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIF.pm +1 -1
- data/bin/lib/Image/ExifTool/FLIR.pm +1 -1
- data/bin/lib/Image/ExifTool/Fixup.pm +1 -1
- data/bin/lib/Image/ExifTool/Flash.pm +1 -1
- data/bin/lib/Image/ExifTool/FlashPix.pm +1 -1
- data/bin/lib/Image/ExifTool/Font.pm +1 -1
- data/bin/lib/Image/ExifTool/FotoStation.pm +1 -1
- data/bin/lib/Image/ExifTool/FujiFilm.pm +1 -1
- data/bin/lib/Image/ExifTool/GE.pm +1 -1
- data/bin/lib/Image/ExifTool/GIF.pm +1 -1
- data/bin/lib/Image/ExifTool/GIMP.pm +1 -1
- data/bin/lib/Image/ExifTool/GM.pm +1 -1
- data/bin/lib/Image/ExifTool/GPS.pm +1 -1
- data/bin/lib/Image/ExifTool/GeoTiff.pm +1 -1
- data/bin/lib/Image/ExifTool/Geolocation.pm +1 -1
- data/bin/lib/Image/ExifTool/Geotag.pm +1 -1
- data/bin/lib/Image/ExifTool/GoPro.pm +1 -1
- data/bin/lib/Image/ExifTool/H264.pm +1 -1
- data/bin/lib/Image/ExifTool/HP.pm +1 -1
- data/bin/lib/Image/ExifTool/HTML.pm +1 -1
- data/bin/lib/Image/ExifTool/HtmlDump.pm +1 -1
- data/bin/lib/Image/ExifTool/ICC_Profile.pm +1 -1
- data/bin/lib/Image/ExifTool/ICO.pm +1 -1
- data/bin/lib/Image/ExifTool/ID3.pm +1 -1
- data/bin/lib/Image/ExifTool/IPTC.pm +8 -5
- data/bin/lib/Image/ExifTool/ISO.pm +1 -1
- data/bin/lib/Image/ExifTool/ITC.pm +1 -1
- data/bin/lib/Image/ExifTool/Import.pm +5 -4
- data/bin/lib/Image/ExifTool/InDesign.pm +1 -1
- data/bin/lib/Image/ExifTool/InfiRay.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/JPEGDigest.pm +1 -1
- data/bin/lib/Image/ExifTool/JSON.pm +1 -1
- data/bin/lib/Image/ExifTool/JVC.pm +1 -1
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +1 -1
- data/bin/lib/Image/ExifTool/Kodak.pm +1 -1
- data/bin/lib/Image/ExifTool/KyoceraRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/LIF.pm +1 -1
- data/bin/lib/Image/ExifTool/LNK.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/cs.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/de.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_ca.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/en_gb.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/es.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fi.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/fr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/it.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ja.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ko.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/nl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/pl.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/ru.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/sk.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/sv.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/tr.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_cn.pm +1 -1
- data/bin/lib/Image/ExifTool/Lang/zh_tw.pm +1 -1
- data/bin/lib/Image/ExifTool/Leaf.pm +1 -1
- data/bin/lib/Image/ExifTool/LigoGPS.pm +408 -0
- data/bin/lib/Image/ExifTool/Lytro.pm +1 -1
- data/bin/lib/Image/ExifTool/M2TS.pm +22 -13
- data/bin/lib/Image/ExifTool/MIE.pm +1 -1
- data/bin/lib/Image/ExifTool/MIEUnits.pod +1 -1
- data/bin/lib/Image/ExifTool/MIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/MISB.pm +1 -1
- data/bin/lib/Image/ExifTool/MNG.pm +1 -1
- data/bin/lib/Image/ExifTool/MOI.pm +1 -1
- data/bin/lib/Image/ExifTool/MPC.pm +1 -1
- data/bin/lib/Image/ExifTool/MPEG.pm +1 -1
- data/bin/lib/Image/ExifTool/MPF.pm +1 -1
- data/bin/lib/Image/ExifTool/MRC.pm +1 -1
- data/bin/lib/Image/ExifTool/MWG.pm +1 -1
- data/bin/lib/Image/ExifTool/MXF.pm +1 -1
- data/bin/lib/Image/ExifTool/MacOS.pm +1 -1
- data/bin/lib/Image/ExifTool/MakerNotes.pm +1 -1
- data/bin/lib/Image/ExifTool/Matroska.pm +12 -4
- data/bin/lib/Image/ExifTool/Microsoft.pm +1 -1
- data/bin/lib/Image/ExifTool/Minolta.pm +1 -1
- data/bin/lib/Image/ExifTool/MinoltaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Motorola.pm +1 -1
- data/bin/lib/Image/ExifTool/Nikon.pm +164 -35
- data/bin/lib/Image/ExifTool/NikonCapture.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonCustom.pm +1 -1
- data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- data/bin/lib/Image/ExifTool/Nintendo.pm +1 -1
- data/bin/lib/Image/ExifTool/OOXML.pm +1 -1
- data/bin/lib/Image/ExifTool/Ogg.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +1 -1
- data/bin/lib/Image/ExifTool/OpenEXR.pm +1 -1
- data/bin/lib/Image/ExifTool/Opus.pm +1 -1
- data/bin/lib/Image/ExifTool/Other.pm +1 -1
- data/bin/lib/Image/ExifTool/PCX.pm +1 -1
- data/bin/lib/Image/ExifTool/PDF.pm +1 -1
- data/bin/lib/Image/ExifTool/PGF.pm +1 -1
- data/bin/lib/Image/ExifTool/PICT.pm +1 -1
- data/bin/lib/Image/ExifTool/PLIST.pm +1 -1
- data/bin/lib/Image/ExifTool/PLUS.pm +1 -1
- data/bin/lib/Image/ExifTool/PNG.pm +1 -1
- data/bin/lib/Image/ExifTool/PPM.pm +1 -1
- data/bin/lib/Image/ExifTool/PSP.pm +1 -1
- data/bin/lib/Image/ExifTool/Palm.pm +1 -1
- data/bin/lib/Image/ExifTool/Panasonic.pm +20 -2
- data/bin/lib/Image/ExifTool/PanasonicRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Parrot.pm +1 -1
- data/bin/lib/Image/ExifTool/Pentax.pm +1 -1
- data/bin/lib/Image/ExifTool/PhaseOne.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoCD.pm +1 -1
- data/bin/lib/Image/ExifTool/PhotoMechanic.pm +1 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +1 -1
- data/bin/lib/Image/ExifTool/PostScript.pm +1 -1
- data/bin/lib/Image/ExifTool/PrintIM.pm +1 -1
- data/bin/lib/Image/ExifTool/Protobuf.pm +24 -14
- data/bin/lib/Image/ExifTool/Qualcomm.pm +1 -1
- data/bin/lib/Image/ExifTool/QuickTime.pm +46 -17
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +20 -302
- data/bin/lib/Image/ExifTool/README +4 -0
- data/bin/lib/Image/ExifTool/RIFF.pm +1 -1
- data/bin/lib/Image/ExifTool/RSRC.pm +1 -1
- data/bin/lib/Image/ExifTool/RTF.pm +1 -1
- data/bin/lib/Image/ExifTool/Radiance.pm +1 -1
- data/bin/lib/Image/ExifTool/Rawzor.pm +1 -1
- data/bin/lib/Image/ExifTool/Real.pm +1 -1
- data/bin/lib/Image/ExifTool/Reconyx.pm +1 -1
- data/bin/lib/Image/ExifTool/Red.pm +1 -1
- data/bin/lib/Image/ExifTool/Ricoh.pm +1 -1
- data/bin/lib/Image/ExifTool/Samsung.pm +1 -1
- data/bin/lib/Image/ExifTool/Sanyo.pm +1 -1
- data/bin/lib/Image/ExifTool/Scalado.pm +1 -1
- data/bin/lib/Image/ExifTool/Shift.pl +1 -1
- data/bin/lib/Image/ExifTool/Shortcuts.pm +1 -1
- data/bin/lib/Image/ExifTool/Sigma.pm +1 -1
- data/bin/lib/Image/ExifTool/SigmaRaw.pm +1 -1
- data/bin/lib/Image/ExifTool/Sony.pm +1 -1
- data/bin/lib/Image/ExifTool/SonyIDC.pm +1 -1
- data/bin/lib/Image/ExifTool/Stim.pm +1 -1
- data/bin/lib/Image/ExifTool/TagInfoXML.pm +2 -2
- data/bin/lib/Image/ExifTool/TagLookup.pm +11 -5
- data/bin/lib/Image/ExifTool/TagNames.pod +84 -34
- data/bin/lib/Image/ExifTool/Text.pm +1 -1
- data/bin/lib/Image/ExifTool/Theora.pm +1 -1
- data/bin/lib/Image/ExifTool/Torrent.pm +1 -1
- data/bin/lib/Image/ExifTool/Unknown.pm +1 -1
- data/bin/lib/Image/ExifTool/VCard.pm +1 -1
- data/bin/lib/Image/ExifTool/Validate.pm +1 -1
- data/bin/lib/Image/ExifTool/Vorbis.pm +1 -1
- data/bin/lib/Image/ExifTool/WPG.pm +1 -1
- data/bin/lib/Image/ExifTool/WTV.pm +1 -1
- data/bin/lib/Image/ExifTool/WriteCanonRaw.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteExif.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteIPTC.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePDF.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePNG.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePhotoshop.pl +1 -1
- data/bin/lib/Image/ExifTool/WritePostScript.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteQuickTime.pl +5 -3
- data/bin/lib/Image/ExifTool/WriteRIFF.pl +1 -1
- data/bin/lib/Image/ExifTool/WriteXMP.pl +1 -1
- data/bin/lib/Image/ExifTool/Writer.pl +9 -8
- data/bin/lib/Image/ExifTool/XISF.pm +1 -1
- data/bin/lib/Image/ExifTool/XMP.pm +1 -1
- data/bin/lib/Image/ExifTool/XMP2.pl +1 -1
- data/bin/lib/Image/ExifTool/XMPStruct.pl +1 -1
- data/bin/lib/Image/ExifTool/ZIP.pm +1 -1
- data/bin/lib/Image/ExifTool/ZISRAW.pm +1 -1
- data/bin/lib/Image/ExifTool/iWork.pm +1 -1
- data/bin/lib/Image/ExifTool.pm +13 -7
- data/bin/lib/Image/ExifTool.pod +14 -5
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +3 -2
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
# 5) http://msdn.microsoft.com/en-us/library/ms809762.aspx
|
|
14
14
|
# 6) http://code.google.com/p/pefile/
|
|
15
15
|
# 7) http://www.codeproject.com/KB/DLL/showver.aspx
|
|
16
|
+
# 8) https://learn.microsoft.com/en-us/windows/win32/debug/pe-format
|
|
16
17
|
#------------------------------------------------------------------------------
|
|
17
18
|
|
|
18
19
|
package Image::ExifTool::EXE;
|
|
@@ -21,7 +22,7 @@ use strict;
|
|
|
21
22
|
use vars qw($VERSION);
|
|
22
23
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
23
24
|
|
|
24
|
-
$VERSION = '1.
|
|
25
|
+
$VERSION = '1.20';
|
|
25
26
|
|
|
26
27
|
sub ProcessPEResources($$);
|
|
27
28
|
sub ProcessPEVersion($$);
|
|
@@ -171,6 +172,13 @@ my %languageCode = (
|
|
|
171
172
|
'100C' => 'French (Swiss)',
|
|
172
173
|
);
|
|
173
174
|
|
|
175
|
+
my %int32uTime = (
|
|
176
|
+
Format => 'int32u',
|
|
177
|
+
Groups => { 0 => 'EXE', 1 => 'EXE', 2 => 'Time' },
|
|
178
|
+
ValueConv => 'ConvertUnixTime($val,1)',
|
|
179
|
+
PrintConv => '$self->ConvertDateTime($val)',
|
|
180
|
+
);
|
|
181
|
+
|
|
174
182
|
# Information extracted from PE COFF (Windows EXE) file header
|
|
175
183
|
%Image::ExifTool::EXE::Main = (
|
|
176
184
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
@@ -215,13 +223,7 @@ my %languageCode = (
|
|
|
215
223
|
0xc0ee => 'clr pure MSIL',
|
|
216
224
|
},
|
|
217
225
|
},
|
|
218
|
-
2 => {
|
|
219
|
-
Name => 'TimeStamp',
|
|
220
|
-
Format => 'int32u',
|
|
221
|
-
Groups => { 2 => 'Time' },
|
|
222
|
-
ValueConv => 'ConvertUnixTime($val,1)',
|
|
223
|
-
PrintConv => '$self->ConvertDateTime($val)',
|
|
224
|
-
},
|
|
226
|
+
2 => { Name => 'TimeStamp', %int32uTime },
|
|
225
227
|
9 => {
|
|
226
228
|
Name => 'ImageFileCharacteristics',
|
|
227
229
|
# ref https://docs.microsoft.com/en-us/windows/desktop/api/winnt/ns-winnt-_image_file_header
|
|
@@ -243,6 +245,10 @@ my %languageCode = (
|
|
|
243
245
|
15 => 'Bytes reversed hi',
|
|
244
246
|
}},
|
|
245
247
|
},
|
|
248
|
+
#
|
|
249
|
+
# optional header starts at index 10
|
|
250
|
+
# (note: all extracted tags are the same for 32 and 64-bit versions of the optional header)
|
|
251
|
+
#
|
|
246
252
|
10 => {
|
|
247
253
|
Name => 'PEType',
|
|
248
254
|
PrintHex => 1,
|
|
@@ -308,6 +314,42 @@ my %languageCode = (
|
|
|
308
314
|
},
|
|
309
315
|
);
|
|
310
316
|
|
|
317
|
+
# information extracted from newer CodeView PDB70 ("RSDS") debug entry
|
|
318
|
+
%Image::ExifTool::EXE::DebugRSDS = (
|
|
319
|
+
GROUPS => { 2 => 'Other' },
|
|
320
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
321
|
+
NOTES => 'CodeView RSDS debug information found in some Windows EXE files.',
|
|
322
|
+
0 => {
|
|
323
|
+
Name => 'PDBModifyDate',
|
|
324
|
+
Notes => 'Taken from debug directory entry pointing to RSDS record.',
|
|
325
|
+
%int32uTime,
|
|
326
|
+
},
|
|
327
|
+
20 => { Name => 'PDBAge', Format => 'int32u' },
|
|
328
|
+
24 => { Name => 'PDBFileName', Format => 'string' },
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
# information extracted from older CodeView PDB20 ("NB10") debug entry
|
|
332
|
+
%Image::ExifTool::EXE::DebugNB10 = (
|
|
333
|
+
GROUPS => { 2 => 'Other' },
|
|
334
|
+
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
335
|
+
NOTES => 'CodeView NB10 debug information found in some Windows EXE files.',
|
|
336
|
+
0 => {
|
|
337
|
+
Name => 'PDBModifyDate',
|
|
338
|
+
Notes => 'Taken from debug directory entry pointing to NB10 record.',
|
|
339
|
+
%int32uTime,
|
|
340
|
+
},
|
|
341
|
+
8 => { Name => 'PDBCreateDate',%int32uTime },
|
|
342
|
+
12 => { Name => 'PDBAge', Format => 'int32u' },
|
|
343
|
+
16 => { Name => 'PDBFileName', Format => 'string' },
|
|
344
|
+
);
|
|
345
|
+
|
|
346
|
+
%Image::ExifTool::EXE::Misc = (
|
|
347
|
+
GROUPS => { 2 => 'Other' },
|
|
348
|
+
VARS => { ID_LABEL => 'Index1' },
|
|
349
|
+
NOTES => 'Miscellaneous CodeView debug information in Windows EXE files.',
|
|
350
|
+
12 => 'EXEFileName',
|
|
351
|
+
);
|
|
352
|
+
|
|
311
353
|
# PE file version information (ref 6)
|
|
312
354
|
%Image::ExifTool::EXE::PEVersion = (
|
|
313
355
|
PROCESS_PROC => \&Image::ExifTool::ProcessBinaryData,
|
|
@@ -974,6 +1016,22 @@ sub ProcessPEVersion($$)
|
|
|
974
1016
|
return 1;
|
|
975
1017
|
}
|
|
976
1018
|
|
|
1019
|
+
#------------------------------------------------------------------------------
|
|
1020
|
+
# Get actual file offset given a virtual address in a PE file
|
|
1021
|
+
# Inputs: 0) virtual address, 1) section list ref
|
|
1022
|
+
# Returns: absolute file offset or undef on error
|
|
1023
|
+
sub GetFileOffset($$)
|
|
1024
|
+
{
|
|
1025
|
+
my ($addr, $sections) = @_;
|
|
1026
|
+
my $section;
|
|
1027
|
+
foreach $section (@$sections) {
|
|
1028
|
+
next unless $addr >= $$section{VirtualAddress} and
|
|
1029
|
+
$addr < $$section{VirtualAddress} + $$section{Size};
|
|
1030
|
+
return $addr + $$section{Base} - $$section{VirtualAddress};
|
|
1031
|
+
}
|
|
1032
|
+
return undef;
|
|
1033
|
+
}
|
|
1034
|
+
|
|
977
1035
|
#------------------------------------------------------------------------------
|
|
978
1036
|
# Process Windows PE Resources
|
|
979
1037
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref
|
|
@@ -994,6 +1052,7 @@ sub ProcessPEResources($$)
|
|
|
994
1052
|
my $nameEntries = Get16u(\$buff, 12);
|
|
995
1053
|
my $idEntries = Get16u(\$buff, 14);
|
|
996
1054
|
my $count = $nameEntries + $idEntries;
|
|
1055
|
+
return 0 if $count > 10000;
|
|
997
1056
|
$raf->Read($buff, $count * 8) == $count * 8 or return 0;
|
|
998
1057
|
# loop through all resource entries
|
|
999
1058
|
for ($item=0; $item<$count; ++$item) {
|
|
@@ -1023,18 +1082,12 @@ sub ProcessPEResources($$)
|
|
|
1023
1082
|
# get position of this resource in the file
|
|
1024
1083
|
my $buf2;
|
|
1025
1084
|
$raf->Seek($entryPos + $base, 0) and $raf->Read($buf2, 16) == 16 or return 0;
|
|
1026
|
-
my $
|
|
1085
|
+
my $addr = Get32u(\$buf2, 0);
|
|
1027
1086
|
my $len = Get32u(\$buf2, 4);
|
|
1028
1087
|
# determine which section this is in so we can convert the virtual address
|
|
1029
|
-
my ($
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
$off < $$section{VirtualAddress} + $$section{Size};
|
|
1033
|
-
$filePos = $off + $$section{Base} - $$section{VirtualAddress};
|
|
1034
|
-
last;
|
|
1035
|
-
}
|
|
1036
|
-
return 0 unless $filePos;
|
|
1037
|
-
$raf->Seek($filePos, 0) and $raf->Read($buf2, $len) == $len or return 0;
|
|
1088
|
+
my $fileOff = GetFileOffset($addr, $$dirInfo{Sections});
|
|
1089
|
+
return 0 unless $fileOff;
|
|
1090
|
+
$raf->Seek($fileOff, 0) and $raf->Read($buf2, $len) == $len or return 0;
|
|
1038
1091
|
ProcessPEVersion($et, {
|
|
1039
1092
|
DataPt => \$buf2,
|
|
1040
1093
|
DataLen => $len,
|
|
@@ -1050,7 +1103,8 @@ sub ProcessPEResources($$)
|
|
|
1050
1103
|
#------------------------------------------------------------------------------
|
|
1051
1104
|
# Process Windows PE file data dictionary
|
|
1052
1105
|
# Inputs: 0) ExifTool object ref, 1) dirInfo ref
|
|
1053
|
-
# Returns: true on success
|
|
1106
|
+
# Returns: true on success or if the PE resources didn't exist, or false on error
|
|
1107
|
+
# processing the PE resources
|
|
1054
1108
|
sub ProcessPEDict($$)
|
|
1055
1109
|
{
|
|
1056
1110
|
my ($et, $dirInfo) = @_;
|
|
@@ -1078,6 +1132,7 @@ sub ProcessPEDict($$)
|
|
|
1078
1132
|
Sections => \@sections,
|
|
1079
1133
|
);
|
|
1080
1134
|
}
|
|
1135
|
+
$$dirInfo{Sections} = \@sections; # return section information
|
|
1081
1136
|
# process the first resource section
|
|
1082
1137
|
ProcessPEResources($et, \%dirInfo) or return 0 if %dirInfo;
|
|
1083
1138
|
return 1;
|
|
@@ -1228,11 +1283,12 @@ sub ProcessEXE($$)
|
|
|
1228
1283
|
# read the rest of the optional header if necessary
|
|
1229
1284
|
my $optSize = Get16u(\$buff, 20);
|
|
1230
1285
|
my $more = $optSize + 24 - $size;
|
|
1286
|
+
my $magic;
|
|
1231
1287
|
if ($more > 0) {
|
|
1232
1288
|
if ($raf->Read($buf2, $more) == $more) {
|
|
1233
1289
|
$buff .= $buf2;
|
|
1234
1290
|
$size += $more;
|
|
1235
|
-
|
|
1291
|
+
$magic = Get16u(\$buff, 24);
|
|
1236
1292
|
# verify PE magic number
|
|
1237
1293
|
unless ($magic == 0x107 or $magic == 0x10b or $magic == 0x20b) {
|
|
1238
1294
|
$et->Warn('Unknown PE magic number');
|
|
@@ -1246,21 +1302,54 @@ sub ProcessEXE($$)
|
|
|
1246
1302
|
# process PE COFF file header
|
|
1247
1303
|
$tagTablePtr = GetTagTable('Image::ExifTool::EXE::Main');
|
|
1248
1304
|
%dirInfo = (
|
|
1249
|
-
DataPt
|
|
1250
|
-
DataPos
|
|
1251
|
-
DataLen
|
|
1305
|
+
DataPt => \$buff,
|
|
1306
|
+
DataPos => $raf->Tell() - $size,
|
|
1307
|
+
DataLen => $size,
|
|
1252
1308
|
DirStart => 4,
|
|
1253
|
-
DirLen
|
|
1309
|
+
DirLen => $size - 4,
|
|
1254
1310
|
);
|
|
1255
1311
|
$et->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
|
1256
|
-
# process data dictionary
|
|
1257
1312
|
my $num = Get16u(\$buff, 6); # NumberOfSections
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1313
|
+
# image data directory entry for debug info is index 6,
|
|
1314
|
+
# so offset is 4 bytes + 20 byte header + 96 bytes into PE32 optional
|
|
1315
|
+
# header (or 112 bytes for PE32+) + 6 * 8 bytes into data directory
|
|
1316
|
+
my $dirEntry = $magic == 0x20b ? 184 : 168;
|
|
1317
|
+
my ($addr, $len, $pos, $buf2); # virtual address/size of debug section
|
|
1318
|
+
if (length($buff) >= $dirEntry + 8) {
|
|
1319
|
+
$addr = Get32u(\$buff, $dirEntry);
|
|
1320
|
+
$len = Get32u(\$buff, $dirEntry+4);
|
|
1321
|
+
}
|
|
1322
|
+
# process data dictionary
|
|
1323
|
+
# (ref https://www.debuginfo.com/articles/debuginfomatch.html)
|
|
1324
|
+
return 1 unless $raf->Read($buff, 40 * $num) == 40 * $num;
|
|
1325
|
+
%dirInfo = ( RAF => $raf, DataPt => \$buff );
|
|
1326
|
+
ProcessPEDict($et, \%dirInfo) or $et->Warn('Error processing PE resources');
|
|
1327
|
+
# dive into debug section to extract pdb info if available
|
|
1328
|
+
return 1 unless $addr and $len < 2800 and $dirInfo{Sections} and
|
|
1329
|
+
($magic == 0x10b or $magic == 0x20b);
|
|
1330
|
+
# get file offset for debug section
|
|
1331
|
+
my $off = GetFileOffset($addr, $dirInfo{Sections});
|
|
1332
|
+
return 1 unless $off and $raf->Seek($off,0) and
|
|
1333
|
+
$raf->Read($buff,$len) == $len;
|
|
1334
|
+
for ($pos=0; $pos+28<=$len; $pos+=28) {
|
|
1335
|
+
my $type = Get32u(\$buff,$pos+12);
|
|
1336
|
+
next unless $type == 2 or $type == 4; # (CodeView debug data)
|
|
1337
|
+
my ($n, $of) = (Get32u(\$buff,$pos+16), Get32u(\$buff,$pos+24));
|
|
1338
|
+
next unless $n < 1e4 and $raf->Seek($of,0) and $raf->Read($buf2,$n) == $n;
|
|
1339
|
+
if ($type == 2) { # CodeView debug info
|
|
1340
|
+
next unless $buf2 =~ /^(RSDS|NB10)/;
|
|
1341
|
+
$tagTablePtr = GetTagTable("Image::ExifTool::EXE::Debug$1");
|
|
1342
|
+
substr($buf2,0,4) = substr($buff,$pos+4,4); # use timestamp from debug dir
|
|
1343
|
+
%dirInfo = ( DataPt => \$buf2, DataPos => $of );
|
|
1344
|
+
$et->ProcessDirectory(\%dirInfo, $tagTablePtr);
|
|
1345
|
+
} else { # misc debug info
|
|
1346
|
+
next unless $n > 12;
|
|
1347
|
+
my $exe = substr($buf2,12);
|
|
1348
|
+
$exe = $et->Decode($exe, 'UCS2') if Get32u(\$buf2,8);
|
|
1349
|
+
$exe =~ s/\0.*//; # truncate at null
|
|
1350
|
+
$tagTablePtr = GetTagTable('Image::ExifTool::EXE::Misc');
|
|
1351
|
+
$et->HandleTag($tagTablePtr, 12, $exe, DataPt => \$buf2, DataPos => $of);
|
|
1352
|
+
}
|
|
1264
1353
|
}
|
|
1265
1354
|
return 1;
|
|
1266
1355
|
}
|
|
@@ -1454,7 +1543,7 @@ library files.
|
|
|
1454
1543
|
|
|
1455
1544
|
=head1 AUTHOR
|
|
1456
1545
|
|
|
1457
|
-
Copyright 2003-
|
|
1546
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1458
1547
|
|
|
1459
1548
|
This library is free software; you can redistribute it and/or modify it
|
|
1460
1549
|
under the same terms as Perl itself.
|
|
@@ -1477,6 +1566,8 @@ under the same terms as Perl itself.
|
|
|
1477
1566
|
|
|
1478
1567
|
=item L<http://www.codeproject.com/KB/DLL/showver.aspx>
|
|
1479
1568
|
|
|
1569
|
+
=item L<https://learn.microsoft.com/en-us/windows/win32/debug/pe-format>
|
|
1570
|
+
|
|
1480
1571
|
=back
|
|
1481
1572
|
|
|
1482
1573
|
=head1 SEE ALSO
|
|
@@ -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.
|
|
60
|
+
$VERSION = '4.56';
|
|
61
61
|
|
|
62
62
|
sub ProcessExif($$$);
|
|
63
63
|
sub WriteExif($$$);
|
|
@@ -246,10 +246,13 @@ $formatName[129] = 'utf8'; # (Exif 3.0)
|
|
|
246
246
|
# 34888,34889 - ESRI reserved
|
|
247
247
|
34892 => 'Lossy JPEG', # (DNG 1.4)
|
|
248
248
|
34925 => 'LZMA2', #LibTiff
|
|
249
|
-
34926 => 'Zstd', #LibTiff
|
|
250
|
-
34927 => 'WebP', #LibTiff
|
|
249
|
+
34926 => 'Zstd (old)', #LibTiff
|
|
250
|
+
34927 => 'WebP (old)', #LibTiff
|
|
251
251
|
34933 => 'PNG', # (TIFF mail list)
|
|
252
252
|
34934 => 'JPEG XR', # (TIFF mail list)
|
|
253
|
+
50000 => 'Zstd', #LibTiff 4.7
|
|
254
|
+
50001 => 'WebP', #LibTiff 4.7
|
|
255
|
+
50002 => 'JPEG XL (old)', #LibTiff 4.7
|
|
253
256
|
52546 => 'JPEG XL', # (DNG 1.7)
|
|
254
257
|
65000 => 'Kodak DCR Compressed', #PH
|
|
255
258
|
65535 => 'Pentax PEF Compressed', #Jens
|
|
@@ -7140,7 +7143,7 @@ EXIF and TIFF meta information.
|
|
|
7140
7143
|
|
|
7141
7144
|
=head1 AUTHOR
|
|
7142
7145
|
|
|
7143
|
-
Copyright 2003-
|
|
7146
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
7144
7147
|
|
|
7145
7148
|
This library is free software; you can redistribute it and/or modify it
|
|
7146
7149
|
under the same terms as Perl itself.
|
|
@@ -137,7 +137,7 @@ information from FITS (Flexible Image Transport System) images.
|
|
|
137
137
|
|
|
138
138
|
=head1 AUTHOR
|
|
139
139
|
|
|
140
|
-
Copyright 2003-
|
|
140
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
141
141
|
|
|
142
142
|
This library is free software; you can redistribute it and/or modify it
|
|
143
143
|
under the same terms as Perl itself.
|
|
@@ -298,7 +298,7 @@ information from Free Lossless Audio Codec (FLAC) audio files.
|
|
|
298
298
|
|
|
299
299
|
=head1 AUTHOR
|
|
300
300
|
|
|
301
|
-
Copyright 2003-
|
|
301
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
302
302
|
|
|
303
303
|
This library is free software; you can redistribute it and/or modify it
|
|
304
304
|
under the same terms as Perl itself.
|
|
@@ -329,7 +329,7 @@ meta information in FLIF (Free Lossless Image Format) images.
|
|
|
329
329
|
|
|
330
330
|
=head1 AUTHOR
|
|
331
331
|
|
|
332
|
-
Copyright 2003-
|
|
332
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
333
333
|
|
|
334
334
|
This library is free software; you can redistribute it and/or modify it
|
|
335
335
|
under the same terms as Perl itself.
|
|
@@ -1633,7 +1633,7 @@ Systems Inc. thermal image files (FFF, FPF and JPEG format).
|
|
|
1633
1633
|
|
|
1634
1634
|
=head1 AUTHOR
|
|
1635
1635
|
|
|
1636
|
-
Copyright 2003-
|
|
1636
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1637
1637
|
|
|
1638
1638
|
This library is free software; you can redistribute it and/or modify it
|
|
1639
1639
|
under the same terms as Perl itself.
|
|
@@ -354,7 +354,7 @@ linear list when ApplyFixups() is called.
|
|
|
354
354
|
|
|
355
355
|
=head1 AUTHOR
|
|
356
356
|
|
|
357
|
-
Copyright 2003-
|
|
357
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
358
358
|
|
|
359
359
|
This library is free software; you can redistribute it and/or modify it
|
|
360
360
|
under the same terms as Perl itself.
|
|
@@ -721,7 +721,7 @@ will add AMF3 support.
|
|
|
721
721
|
|
|
722
722
|
=head1 AUTHOR
|
|
723
723
|
|
|
724
|
-
Copyright 2003-
|
|
724
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
725
725
|
|
|
726
726
|
This library is free software; you can redistribute it and/or modify it
|
|
727
727
|
under the same terms as Perl itself.
|
|
@@ -2557,7 +2557,7 @@ JPEG images.
|
|
|
2557
2557
|
|
|
2558
2558
|
=head1 AUTHOR
|
|
2559
2559
|
|
|
2560
|
-
Copyright 2003-
|
|
2560
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
2561
2561
|
|
|
2562
2562
|
This library is free software; you can redistribute it and/or modify it
|
|
2563
2563
|
under the same terms as Perl itself.
|
|
@@ -633,7 +633,7 @@ extracted from these formats.
|
|
|
633
633
|
|
|
634
634
|
=head1 AUTHOR
|
|
635
635
|
|
|
636
|
-
Copyright 2003-
|
|
636
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
637
637
|
|
|
638
638
|
This library is free software; you can redistribute it and/or modify it
|
|
639
639
|
under the same terms as Perl itself.
|
|
@@ -243,7 +243,7 @@ write information from the FotoWare FotoStation trailer.
|
|
|
243
243
|
|
|
244
244
|
=head1 AUTHOR
|
|
245
245
|
|
|
246
|
-
Copyright 2003-
|
|
246
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
247
247
|
|
|
248
248
|
This library is free software; you can redistribute it and/or modify it
|
|
249
249
|
under the same terms as Perl itself.
|
|
@@ -1959,7 +1959,7 @@ FujiFilm maker notes in EXIF information, and to read/write FujiFilm RAW
|
|
|
1959
1959
|
|
|
1960
1960
|
=head1 AUTHOR
|
|
1961
1961
|
|
|
1962
|
-
Copyright 2003-
|
|
1962
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1963
1963
|
|
|
1964
1964
|
This library is free software; you can redistribute it and/or modify it
|
|
1965
1965
|
under the same terms as Perl itself.
|
|
@@ -68,7 +68,7 @@ General Imaging maker notes.
|
|
|
68
68
|
|
|
69
69
|
=head1 AUTHOR
|
|
70
70
|
|
|
71
|
-
Copyright 2003-
|
|
71
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
72
72
|
|
|
73
73
|
This library is free software; you can redistribute it and/or modify it
|
|
74
74
|
under the same terms as Perl itself.
|
|
@@ -596,7 +596,7 @@ write GIF meta information.
|
|
|
596
596
|
|
|
597
597
|
=head1 AUTHOR
|
|
598
598
|
|
|
599
|
-
Copyright 2003-
|
|
599
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
600
600
|
|
|
601
601
|
This library is free software; you can redistribute it and/or modify it
|
|
602
602
|
under the same terms as Perl itself.
|
|
@@ -270,7 +270,7 @@ GIMP software.
|
|
|
270
270
|
|
|
271
271
|
=head1 AUTHOR
|
|
272
272
|
|
|
273
|
-
Copyright 2003-
|
|
273
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
274
274
|
|
|
275
275
|
This library is free software; you can redistribute it and/or modify it
|
|
276
276
|
under the same terms as Perl itself.
|
|
@@ -531,7 +531,7 @@ metadata from videos written by some GM models such as Corvette and Camero.
|
|
|
531
531
|
|
|
532
532
|
=head1 AUTHOR
|
|
533
533
|
|
|
534
|
-
Copyright 2003-
|
|
534
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
535
535
|
|
|
536
536
|
This library is free software; you can redistribute it and/or modify it
|
|
537
537
|
under the same terms as Perl itself.
|
|
@@ -619,7 +619,7 @@ GPS (Global Positioning System) meta information in EXIF data.
|
|
|
619
619
|
|
|
620
620
|
=head1 AUTHOR
|
|
621
621
|
|
|
622
|
-
Copyright 2003-
|
|
622
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
623
623
|
|
|
624
624
|
This library is free software; you can redistribute it and/or modify it
|
|
625
625
|
under the same terms as Perl itself.
|
|
@@ -2242,7 +2242,7 @@ coordinates.
|
|
|
2242
2242
|
|
|
2243
2243
|
=head1 AUTHOR
|
|
2244
2244
|
|
|
2245
|
-
Copyright 2003-
|
|
2245
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
2246
2246
|
|
|
2247
2247
|
This library is free software; you can redistribute it and/or modify it
|
|
2248
2248
|
under the same terms as Perl itself.
|
|
@@ -1006,7 +1006,7 @@ the input arguments of the AddEntry method.
|
|
|
1006
1006
|
|
|
1007
1007
|
=head1 AUTHOR
|
|
1008
1008
|
|
|
1009
|
-
Copyright 2003-
|
|
1009
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1010
1010
|
|
|
1011
1011
|
This library is free software; you can redistribute it and/or modify it
|
|
1012
1012
|
under the same terms as Perl itself. The associated database files are
|
|
@@ -1561,7 +1561,7 @@ user-defined tag GPSRoll, must be active.
|
|
|
1561
1561
|
|
|
1562
1562
|
=head1 AUTHOR
|
|
1563
1563
|
|
|
1564
|
-
Copyright 2003-
|
|
1564
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1565
1565
|
|
|
1566
1566
|
This library is free software; you can redistribute it and/or modify it
|
|
1567
1567
|
under the same terms as Perl itself.
|
|
@@ -860,7 +860,7 @@ metadata from GoPro MP4 videos.
|
|
|
860
860
|
|
|
861
861
|
=head1 AUTHOR
|
|
862
862
|
|
|
863
|
-
Copyright 2003-
|
|
863
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
864
864
|
|
|
865
865
|
This library is free software; you can redistribute it and/or modify it
|
|
866
866
|
under the same terms as Perl itself.
|
|
@@ -1123,7 +1123,7 @@ information from H.264 video streams.
|
|
|
1123
1123
|
|
|
1124
1124
|
=head1 AUTHOR
|
|
1125
1125
|
|
|
1126
|
-
Copyright 2003-
|
|
1126
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1127
1127
|
|
|
1128
1128
|
This library is free software; you can redistribute it and/or modify it
|
|
1129
1129
|
under the same terms as Perl itself.
|
|
@@ -250,7 +250,7 @@ Hewlett-Packard maker notes.
|
|
|
250
250
|
|
|
251
251
|
=head1 AUTHOR
|
|
252
252
|
|
|
253
|
-
Copyright 2003-
|
|
253
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
254
254
|
|
|
255
255
|
This library is free software; you can redistribute it and/or modify it
|
|
256
256
|
under the same terms as Perl itself.
|
|
@@ -555,7 +555,7 @@ meta information from HTML documents.
|
|
|
555
555
|
|
|
556
556
|
=head1 AUTHOR
|
|
557
557
|
|
|
558
|
-
Copyright 2003-
|
|
558
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
559
559
|
|
|
560
560
|
This library is free software; you can redistribute it and/or modify it
|
|
561
561
|
under the same terms as Perl itself.
|
|
@@ -920,7 +920,7 @@ page.
|
|
|
920
920
|
|
|
921
921
|
=head1 AUTHOR
|
|
922
922
|
|
|
923
|
-
Copyright 2003-
|
|
923
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
924
924
|
|
|
925
925
|
This library is free software; you can redistribute it and/or modify it
|
|
926
926
|
under the same terms as Perl itself.
|
|
@@ -1436,7 +1436,7 @@ data created on one device into another device's native color space.
|
|
|
1436
1436
|
|
|
1437
1437
|
=head1 AUTHOR
|
|
1438
1438
|
|
|
1439
|
-
Copyright 2003-
|
|
1439
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1440
1440
|
|
|
1441
1441
|
This library is free software; you can redistribute it and/or modify it
|
|
1442
1442
|
under the same terms as Perl itself.
|
|
@@ -121,7 +121,7 @@ information from Windows ICO (icon) and CUR (cursor) files.
|
|
|
121
121
|
|
|
122
122
|
=head1 AUTHOR
|
|
123
123
|
|
|
124
|
-
Copyright 2003-
|
|
124
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
125
125
|
|
|
126
126
|
This library is free software; you can redistribute it and/or modify it
|
|
127
127
|
under the same terms as Perl itself.
|
|
@@ -1746,7 +1746,7 @@ other types of audio files.
|
|
|
1746
1746
|
|
|
1747
1747
|
=head1 AUTHOR
|
|
1748
1748
|
|
|
1749
|
-
Copyright 2003-
|
|
1749
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1750
1750
|
|
|
1751
1751
|
This library is free software; you can redistribute it and/or modify it
|
|
1752
1752
|
under the same terms as Perl itself.
|
|
@@ -15,7 +15,7 @@ use strict;
|
|
|
15
15
|
use vars qw($VERSION $AUTOLOAD %iptcCharset);
|
|
16
16
|
use Image::ExifTool qw(:DataAccess :Utils);
|
|
17
17
|
|
|
18
|
-
$VERSION = '1.
|
|
18
|
+
$VERSION = '1.59';
|
|
19
19
|
|
|
20
20
|
%iptcCharset = (
|
|
21
21
|
"\x1b%G" => 'UTF8',
|
|
@@ -1057,7 +1057,7 @@ sub ProcessIPTC($$$)
|
|
|
1057
1057
|
my $verbose = $et->Options('Verbose');
|
|
1058
1058
|
my $validate = $et->Options('Validate');
|
|
1059
1059
|
my $success = 0;
|
|
1060
|
-
my ($lastRec, $recordPtr, $recordName);
|
|
1060
|
+
my ($lastRec, $recordPtr, $recordName, %seen);
|
|
1061
1061
|
|
|
1062
1062
|
$verbose and $dirInfo and $et->VerboseDir('IPTC', 0, $$dirInfo{DirLen});
|
|
1063
1063
|
|
|
@@ -1083,7 +1083,7 @@ sub ProcessIPTC($$$)
|
|
|
1083
1083
|
$et->FoundTag('CurrentIPTCDigest', $md5);
|
|
1084
1084
|
}
|
|
1085
1085
|
} else {
|
|
1086
|
-
if (($Image::ExifTool::MWG::strict or $
|
|
1086
|
+
if (($Image::ExifTool::MWG::strict or $validate) and
|
|
1087
1087
|
$$et{FILE_TYPE} =~ /^(JPEG|TIFF|PSD)$/)
|
|
1088
1088
|
{
|
|
1089
1089
|
if ($Image::ExifTool::MWG::strict) {
|
|
@@ -1186,8 +1186,11 @@ sub ProcessIPTC($$$)
|
|
|
1186
1186
|
# - no Name so name is generated automatically with decimal tag number
|
|
1187
1187
|
AddTagToTable($recordPtr, $tag, { Unknown => 1 });
|
|
1188
1188
|
}
|
|
1189
|
-
|
|
1190
1189
|
my $tagInfo = $et->GetTagInfo($recordPtr, $tag);
|
|
1190
|
+
if ($validate and not $$tagInfo{List} and not $$tagInfo{Unknown}) {
|
|
1191
|
+
$et->Warn("Multiple IPTC $$tagInfo{Name} tags") if $seen{$tagInfo};
|
|
1192
|
+
$seen{$tagInfo} = 1;
|
|
1193
|
+
}
|
|
1191
1194
|
my $format;
|
|
1192
1195
|
# (could use $$recordPtr{FORMAT} if no Format below, but don't do this to
|
|
1193
1196
|
# be backward compatible with improperly written PhotoMechanic tags)
|
|
@@ -1284,7 +1287,7 @@ image files.
|
|
|
1284
1287
|
|
|
1285
1288
|
=head1 AUTHOR
|
|
1286
1289
|
|
|
1287
|
-
Copyright 2003-
|
|
1290
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
1288
1291
|
|
|
1289
1292
|
This library is free software; you can redistribute it and/or modify it
|
|
1290
1293
|
under the same terms as Perl itself.
|
|
@@ -184,7 +184,7 @@ information from ISO 9660 disk images.
|
|
|
184
184
|
|
|
185
185
|
=head1 AUTHOR
|
|
186
186
|
|
|
187
|
-
Copyright 2003-
|
|
187
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
188
188
|
|
|
189
189
|
This library is free software; you can redistribute it and/or modify it
|
|
190
190
|
under the same terms as Perl itself.
|
|
@@ -191,7 +191,7 @@ information (including artwork images) from iTunes Cover Flow files.
|
|
|
191
191
|
|
|
192
192
|
=head1 AUTHOR
|
|
193
193
|
|
|
194
|
-
Copyright 2003-
|
|
194
|
+
Copyright 2003-2025, Phil Harvey (philharvey66 at gmail.com)
|
|
195
195
|
|
|
196
196
|
This library is free software; you can redistribute it and/or modify it
|
|
197
197
|
under the same terms as Perl itself.
|