exiftool_vendored 12.56.0 → 12.57.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 +21 -2
- data/bin/META.json +1 -1
- data/bin/META.yml +1 -1
- data/bin/README +2 -2
- data/bin/exiftool +74 -30
- data/bin/lib/Image/ExifTool/BuildTagLookup.pm +7 -2
- data/bin/lib/Image/ExifTool/FlashPix.pm +4 -0
- data/bin/lib/Image/ExifTool/GPS.pm +7 -2
- data/bin/lib/Image/ExifTool/Jpeg2000.pm +5 -5
- data/bin/lib/Image/ExifTool/MIE.pm +3 -3
- data/bin/lib/Image/ExifTool/Nikon.pm +665 -845
- data/bin/lib/Image/ExifTool/NikonCustom.pm +2 -2
- data/bin/lib/Image/ExifTool/NikonSettings.pm +1 -1
- data/bin/lib/Image/ExifTool/Olympus.pm +3 -1
- data/bin/lib/Image/ExifTool/Photoshop.pm +36 -5
- data/bin/lib/Image/ExifTool/QuickTime.pm +18 -2
- data/bin/lib/Image/ExifTool/QuickTimeStream.pl +2 -0
- data/bin/lib/Image/ExifTool/README +11 -2
- data/bin/lib/Image/ExifTool/Sigma.pm +2 -1
- data/bin/lib/Image/ExifTool/TagLookup.pm +4654 -4628
- data/bin/lib/Image/ExifTool/TagNames.pod +194 -86
- data/bin/lib/Image/ExifTool/Writer.pl +36 -16
- data/bin/lib/Image/ExifTool.pm +38 -22
- data/bin/lib/Image/ExifTool.pod +4 -4
- data/bin/perl-Image-ExifTool.spec +1 -1
- data/lib/exiftool_vendored/version.rb +1 -1
- metadata +2 -2
data/bin/lib/Image/ExifTool.pm
CHANGED
@@ -29,7 +29,7 @@ use vars qw($VERSION $RELEASE @ISA @EXPORT_OK %EXPORT_TAGS $AUTOLOAD @fileTypes
|
|
29
29
|
%jpegMarker %specialTags %fileTypeLookup $testLen $exeDir
|
30
30
|
%static_vars);
|
31
31
|
|
32
|
-
$VERSION = '12.
|
32
|
+
$VERSION = '12.57';
|
33
33
|
$RELEASE = '';
|
34
34
|
@ISA = qw(Exporter);
|
35
35
|
%EXPORT_TAGS = (
|
@@ -2043,6 +2043,7 @@ sub new
|
|
2043
2043
|
$$self{DEL_GROUP} = { }; # lookup for groups to delete when writing
|
2044
2044
|
$$self{SAVE_COUNT} = 0; # count calls to SaveNewValues()
|
2045
2045
|
$$self{FILE_SEQUENCE} = 0; # sequence number for files when reading
|
2046
|
+
$$self{FILES_WRITTEN} = 0; # count of files successfully written
|
2046
2047
|
$$self{INDENT2} = ''; # indentation of verbose messages from SetNewValue
|
2047
2048
|
|
2048
2049
|
# initialize our new groups for writing
|
@@ -7988,7 +7989,7 @@ sub ProcessDirectory($$$;$)
|
|
7988
7989
|
# patch for bug in Windows phone 7.5 O/S that writes incorrect InteropIFD pointer
|
7989
7990
|
return 0 unless $dirName eq 'GPS' and $$self{PROCESSED}{$addr} eq 'InteropIFD';
|
7990
7991
|
}
|
7991
|
-
$$self{PROCESSED}{$addr} = $dirName;
|
7992
|
+
$$self{PROCESSED}{$addr} = $dirName unless $$tagTablePtr{VARS} and $$tagTablePtr{VARS}{ALLOW_REPROCESS};
|
7992
7993
|
}
|
7993
7994
|
my $oldOrder = GetByteOrder();
|
7994
7995
|
my @save = @$self{'INDENT','DIR_NAME','Compression','SubfileType'};
|
@@ -8749,13 +8750,16 @@ sub ProcessBinaryData($$$)
|
|
8749
8750
|
{
|
8750
8751
|
my ($self, $dirInfo, $tagTablePtr) = @_;
|
8751
8752
|
my $dataPt = $$dirInfo{DataPt};
|
8752
|
-
my $
|
8753
|
-
my $
|
8753
|
+
my $dataLen = length $$dataPt;
|
8754
|
+
my $dirStart = $$dirInfo{DirStart} || 0;
|
8755
|
+
my $maxLen = $dataLen - $dirStart;
|
8756
|
+
my $size = $$dirInfo{DirLen};
|
8754
8757
|
my $base = $$dirInfo{Base} || 0;
|
8755
8758
|
my $verbose = $$self{OPTIONS}{Verbose};
|
8756
8759
|
my $unknown = $$self{OPTIONS}{Unknown};
|
8757
8760
|
my $dataPos = $$dirInfo{DataPos} || 0;
|
8758
8761
|
|
8762
|
+
$size = $maxLen if not defined $size or $size > $maxLen;
|
8759
8763
|
# get default format ('int8u' unless specified)
|
8760
8764
|
my $defaultFormat = $$tagTablePtr{FORMAT} || 'int8u';
|
8761
8765
|
my $increment = $formatSize{$defaultFormat};
|
@@ -8797,6 +8801,7 @@ sub ProcessBinaryData($$$)
|
|
8797
8801
|
$tagInfo = $self->GetTagInfo($tagTablePtr, $index);
|
8798
8802
|
unless ($tagInfo) {
|
8799
8803
|
next unless defined $tagInfo;
|
8804
|
+
# $entry = offset of value relative to directory start (or end if negative)
|
8800
8805
|
my $entry = int($index) * $increment + $varSize;
|
8801
8806
|
if ($entry < 0) {
|
8802
8807
|
$entry += $size;
|
@@ -8805,7 +8810,7 @@ sub ProcessBinaryData($$$)
|
|
8805
8810
|
next if $entry >= $size;
|
8806
8811
|
my $more = $size - $entry;
|
8807
8812
|
$more = 128 if $more > 128;
|
8808
|
-
my $v = substr($$dataPt, $entry+$
|
8813
|
+
my $v = substr($$dataPt, $entry+$dirStart, $more);
|
8809
8814
|
$tagInfo = $self->GetTagInfo($tagTablePtr, $index, \$v);
|
8810
8815
|
next unless $tagInfo;
|
8811
8816
|
}
|
@@ -8838,7 +8843,7 @@ sub ProcessBinaryData($$$)
|
|
8838
8843
|
$count = $more;
|
8839
8844
|
} elsif ($format eq 'pstring') {
|
8840
8845
|
$format = 'string';
|
8841
|
-
$count = Get8u($dataPt, ($entry++)+$
|
8846
|
+
$count = Get8u($dataPt, ($entry++)+$dirStart);
|
8842
8847
|
--$more;
|
8843
8848
|
} elsif (not $formatSize{$format}) {
|
8844
8849
|
if ($format =~ /(.*)\[(.*)\]/) {
|
@@ -8867,17 +8872,17 @@ sub ProcessBinaryData($$$)
|
|
8867
8872
|
} elsif ($format =~ /^var_/) {
|
8868
8873
|
# handle variable-length string formats
|
8869
8874
|
$format = substr($format, 4);
|
8870
|
-
pos($$dataPt) = $entry + $
|
8875
|
+
pos($$dataPt) = $entry + $dirStart;
|
8871
8876
|
undef $count;
|
8872
8877
|
if ($format eq 'ustring') {
|
8873
|
-
$count = pos($$dataPt) - ($entry+$
|
8878
|
+
$count = pos($$dataPt) - ($entry+$dirStart) if $$dataPt =~ /\G(..)*?\0\0/sg;
|
8874
8879
|
$varSize -= 2; # ($count includes base size of 2 bytes)
|
8875
8880
|
} elsif ($format eq 'pstring') {
|
8876
|
-
$count = Get8u($dataPt, ($entry++)+$
|
8881
|
+
$count = Get8u($dataPt, ($entry++)+$dirStart);
|
8877
8882
|
--$more;
|
8878
8883
|
} elsif ($format eq 'pstr32' or $format eq 'ustr32') {
|
8879
8884
|
last if $more < 4;
|
8880
|
-
$count = Get32u($dataPt, $entry + $
|
8885
|
+
$count = Get32u($dataPt, $entry + $dirStart);
|
8881
8886
|
$count *= 2 if $format eq 'ustr32';
|
8882
8887
|
$entry += 4;
|
8883
8888
|
$more -= 4;
|
@@ -8885,22 +8890,22 @@ sub ProcessBinaryData($$$)
|
|
8885
8890
|
} elsif ($format eq 'int16u') {
|
8886
8891
|
# int16u size of binary data to follow
|
8887
8892
|
last if $more < 2;
|
8888
|
-
$count = Get16u($dataPt, $entry + $
|
8893
|
+
$count = Get16u($dataPt, $entry + $dirStart) + 2;
|
8889
8894
|
$varSize -= 2; # ($count includes size word)
|
8890
8895
|
$format = 'undef';
|
8891
8896
|
} elsif ($format eq 'ue7') {
|
8892
8897
|
require Image::ExifTool::BPG;
|
8893
|
-
($val, $count) = Image::ExifTool::BPG::Get_ue7($dataPt, $entry + $
|
8898
|
+
($val, $count) = Image::ExifTool::BPG::Get_ue7($dataPt, $entry + $dirStart);
|
8894
8899
|
last unless defined $val;
|
8895
8900
|
--$varSize; # ($count includes base size of 1 byte)
|
8896
8901
|
} elsif ($$dataPt =~ /\0/g) {
|
8897
|
-
$count = pos($$dataPt) - ($entry+$
|
8902
|
+
$count = pos($$dataPt) - ($entry+$dirStart);
|
8898
8903
|
--$varSize; # ($count includes base size of 1 byte)
|
8899
8904
|
}
|
8900
8905
|
$count = $more if not defined $count or $count > $more;
|
8901
8906
|
$varSize += $count; # shift subsequent indices
|
8902
8907
|
unless (defined $val) {
|
8903
|
-
$val = substr($$dataPt, $entry+$
|
8908
|
+
$val = substr($$dataPt, $entry+$dirStart, $count);
|
8904
8909
|
$val = $self->Decode($val, 'UCS2') if $format eq 'ustring' or $format eq 'ustr32';
|
8905
8910
|
$val =~ s/\0.*//s unless $format eq 'undef'; # truncate at null
|
8906
8911
|
}
|
@@ -8914,7 +8919,7 @@ sub ProcessBinaryData($$$)
|
|
8914
8919
|
# hook to allow format, etc to be set dynamically
|
8915
8920
|
if (defined $$tagInfo{Hook}) {
|
8916
8921
|
my $oldVarSize = $varSize;
|
8917
|
-
my $pos = $entry + $
|
8922
|
+
my $pos = $entry + $dirStart;
|
8918
8923
|
#### eval Hook ($format, $varSize, $size, $dataPt, $pos)
|
8919
8924
|
eval $$tagInfo{Hook};
|
8920
8925
|
# save variable size data if required for writing (in case changed by Hook)
|
@@ -8939,7 +8944,7 @@ sub ProcessBinaryData($$$)
|
|
8939
8944
|
next if $$tagInfo{LargeTag} and $$self{EXCL_TAG_LOOKUP}{lc $$tagInfo{Name}};
|
8940
8945
|
# read value now if necessary
|
8941
8946
|
unless (defined $val and not $$tagInfo{SubDirectory}) {
|
8942
|
-
$val = ReadValue($dataPt, $entry+$
|
8947
|
+
$val = ReadValue($dataPt, $entry+$dirStart, $format, $count, $more, \$rational);
|
8943
8948
|
next unless defined $val;
|
8944
8949
|
$mask = $$tagInfo{Mask};
|
8945
8950
|
$val = ($val & $mask) >> $$tagInfo{BitShift} if $mask;
|
@@ -8956,8 +8961,8 @@ sub ProcessBinaryData($$$)
|
|
8956
8961
|
Value => $val,
|
8957
8962
|
DataPt => $dataPt,
|
8958
8963
|
Size => $len,
|
8959
|
-
Start => $entry+$
|
8960
|
-
Addr => $entry+$
|
8964
|
+
Start => $entry+$dirStart,
|
8965
|
+
Addr => $entry+$dirStart+$base+$dataPos,
|
8961
8966
|
Format => $format,
|
8962
8967
|
Count => $count,
|
8963
8968
|
Extra => $mask ? sprintf(', mask 0x%.2x',$mask) : undef,
|
@@ -8983,16 +8988,27 @@ sub ProcessBinaryData($$$)
|
|
8983
8988
|
my $subdirBase = $base;
|
8984
8989
|
if (defined $$subdir{Base}) {
|
8985
8990
|
#### eval Base ($start,$base)
|
8986
|
-
my $start = $entry + $
|
8991
|
+
my $start = $entry + $dirStart + $dataPos;
|
8987
8992
|
$subdirBase = eval($$subdir{Base}) + $base;
|
8988
8993
|
}
|
8989
8994
|
my $start = $$subdir{Start} || 0;
|
8995
|
+
if ($start =~ /\$/) {
|
8996
|
+
# ignore directories with a zero offset (ie. missing Nikon ShotInfo entries)
|
8997
|
+
next unless $val;
|
8998
|
+
#### eval Start ($val, $dirStart)
|
8999
|
+
$start = eval($start);
|
9000
|
+
next if $start < $dirStart or $start > $dataLen;
|
9001
|
+
$len = $$subdir{DirLen};
|
9002
|
+
$len = $dataLen - $start unless $len and $len <= $dataLen - $start;
|
9003
|
+
} else {
|
9004
|
+
$start += $dirStart + $entry;
|
9005
|
+
}
|
8990
9006
|
my %subdirInfo = (
|
8991
9007
|
DataPt => $dataPt,
|
8992
9008
|
DataPos => $dataPos,
|
8993
|
-
DataLen =>
|
8994
|
-
DirStart => $
|
8995
|
-
DirLen => $len
|
9009
|
+
DataLen => $dataLen,
|
9010
|
+
DirStart => $start,
|
9011
|
+
DirLen => $len,
|
8996
9012
|
Base => $subdirBase,
|
8997
9013
|
);
|
8998
9014
|
delete $$self{NO_UNKNOWN};
|
data/bin/lib/Image/ExifTool.pod
CHANGED
@@ -2327,9 +2327,9 @@ CBOR, CIFF, CameraIFD, Canon, CanonCustom, CanonDR4, CanonRaw, CanonVRD,
|
|
2327
2327
|
Casio, Chapter#, Composite, DICOM, DJI, DNG, DV, DjVu, DjVu-Meta, Ducky,
|
2328
2328
|
EPPIM, EXE, EXIF, ExifIFD, ExifTool, FITS, FLAC, FLIR, File, Flash,
|
2329
2329
|
FlashPix, Font, FotoStation, FujiFilm, FujiIFD, GE, GIF, GIMP, GPS,
|
2330
|
-
GSpherical, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
|
2331
|
-
HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
|
2332
|
-
ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile,
|
2330
|
+
GSpherical, Garmin, GeoTiff, GlobParamIFD, GoPro, GraphConv, H264, HP, HTC,
|
2331
|
+
HTML, HTML-dc, HTML-ncc, HTML-office, HTML-prod, HTML-vw96, HTTP-equiv,
|
2332
|
+
ICC-chrm, ICC-clrt, ICC-header, ICC-meas, ICC-meta, ICC-view, ICC_Profile,
|
2333
2333
|
ICC_Profile#, ID3, ID3v1, ID3v1_Enh, ID3v2_2, ID3v2_3, ID3v2_4, IFD0, IFD1,
|
2334
2334
|
IPTC, IPTC#, ISO, ITC, InfiRay, Insta360, InteropIFD, ItemList, JFIF, JFXX,
|
2335
2335
|
JPEG, JPEG-HDR, JPS, JSON, JUMBF, JVC, Jpeg2000, KDC_IFD, Keys, Kodak,
|
@@ -2349,7 +2349,7 @@ RMETA, RSRC, RTF, Radiance, Rawzor, Real, Real-CONT, Real-MDPR, Real-PROP,
|
|
2349
2349
|
Real-RA3, Real-RA4, Real-RA5, Real-RJMD, Reconyx, Red, Ricoh, SPIFF, SR2,
|
2350
2350
|
SR2DataIFD, SR2SubIFD, SRF#, SVG, Samsung, Sanyo, Scalado, Sigma, SigmaRaw,
|
2351
2351
|
Sony, SonyIDC, Stim, SubIFD, System, Theora, Torrent, Track#, UserData,
|
2352
|
-
VCalendar, VCard,
|
2352
|
+
VCalendar, VCard, VNote, Version0, Vorbis, WTV, XML, XMP, XMP-DICOM,
|
2353
2353
|
XMP-Device, XMP-GAudio, XMP-GCamera, XMP-GCreations, XMP-GDepth, XMP-GFocus,
|
2354
2354
|
XMP-GImage, XMP-GPano, XMP-GSpherical, XMP-LImage, XMP-MP, XMP-MP1,
|
2355
2355
|
XMP-PixelLive, XMP-aas, XMP-acdsee, XMP-album, XMP-apple-fi, XMP-ast,
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: exiftool_vendored
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 12.
|
4
|
+
version: 12.57.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew McEachen
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2023-02-
|
12
|
+
date: 2023-02-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: exiftool
|