exiftool_vendored 13.10.0 → 13.12.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 +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.
|