exiftool_vendored 13.22.0 → 13.24.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.
@@ -12,7 +12,7 @@ meta information extracted from or written to a file.
12
12
  =head1 TAG TABLES
13
13
 
14
14
  The tables listed below give the names of all tags recognized by ExifTool.
15
- They contain a total of 28534 tags, with 17595 unique tag names.
15
+ They contain a total of 28408 tags, with 17642 unique tag names.
16
16
 
17
17
  B<Tag ID>, B<Index#> or B<Sequence> is given in the first column of each
18
18
  table. A B<Tag ID> is the computer-readable equivalent of a tag name, and
@@ -125,6 +125,7 @@ L<https://www.w3.org/Graphics/JPEG/jfif3.pdf> for the JPEG specification.
125
125
  PreviewImage no
126
126
  'APP4' Scalado Scalado
127
127
  FPXR FlashPix
128
+ QualcommDualCamera Qualcomm DualCamera
128
129
  InfiRayFactory InfiRay Factory
129
130
  ThermalParams DJI ThermalParams
130
131
  ThermalParams2 DJI ThermalParams2
@@ -15153,7 +15154,7 @@ Tags written by some Nikon GPS-equipped cameras like the AW100.
15153
15154
 
15154
15155
  Index1 Tag Name Writable
15155
15156
  ------ -------- --------
15156
- 0 FirmwareVersion no
15157
+ 0 FirmwareVersion56 no
15157
15158
  4 BurstGroupID int16u
15158
15159
 
15159
15160
  =head3 Nikon AFInfo Tags
@@ -15810,80 +15811,17 @@ These tags are extracted from encrypted data in images from the Z8.
15810
15811
 
15811
15812
  Index1 Tag Name Writable
15812
15813
  ------ -------- --------
15813
- 16 MenuSettingsOffsetZ8 Nikon MenuSettingsZ8
15814
+ 16 MenuSettingsOffsetZ8v1 Nikon MenuSettingsZ8v1
15814
15815
  MenuSettingsOffsetZ8v2 -
15815
15816
  Nikon MenuSettingsZ8v2
15816
15817
 
15817
- =head3 Nikon MenuSettingsZ8 Tags
15818
+ =head3 Nikon MenuSettingsZ8v1 Tags
15818
15819
 
15819
- These tags are used by the Z8 firmware 1.00.
15820
+ These tags are used by the Z8 firmware 1.00 and 1.10.
15820
15821
 
15821
15822
  Index1 Tag Name Writable
15822
15823
  ------ -------- --------
15823
- 72 HighFrameRate int8u
15824
- 152 MultipleExposureMode int8u
15825
- 154 MultiExposureShots int8u
15826
- 184 IntervalDurationHours int32u
15827
- 188 IntervalDurationMinutes int32u
15828
- 192 IntervalDurationSeconds int32u
15829
- 200 Intervals int32u
15830
- 204 ShotsPerInterval int32u
15831
- 208 IntervalExposureSmoothing int8u
15832
- 210 IntervalPriority int8u
15833
- 244 FocusShiftNumberShots int8u
15834
- 248 FocusShiftStepWidth int8u
15835
- 252 FocusShiftInterval int8u~
15836
- 256 FocusShiftExposureLock? int8u
15837
- 286 PhotoShootingMenuBank int8u
15838
- 288 ExtendedMenuBanks int8u
15839
- 324 PhotoShootingMenuBankImageArea int8u
15840
- 338 AutoISO int8u
15841
- 340 ISOAutoHiLimit? int16u
15842
- 342 ISOAutoFlashLimit? int16u
15843
- 350 ISOAutoShutterTime no
15844
- 432 MovieVignetteControl? int8u
15845
- 434 DiffractionCompensation int8u
15846
- 436 FlickerReductionShooting int8u
15847
- 440 FlashControlMode int8u
15848
- 548 AFAreaMode int8u
15849
- 550 VRMode int8u
15850
- 554 BracketSet int8u
15851
- 556 BracketProgram int8u
15852
- 558 BracketIncrement int8u
15853
- 570 HDR int8u
15854
- 576 SecondarySlotFunction int8u
15855
- 582 HDRLevel int8u
15856
- 586 Slot2JpgSize? int8u
15857
- 592 DXCropAlert int8u
15858
- 594 SubjectDetection int8u
15859
- 596 DynamicAFAreaSize int8u
15860
- 618 ToneMap? int8u
15861
- 622 PortraitImpressionBalance int8u
15862
- 636 HighFrequencyFlickerReduction? int8u
15863
- 730 MovieImageArea? int8u & 0x01
15864
- 740 MovieType? int8u
15865
- 742 MovieISOAutoHiLimit? int16u
15866
- 744 MovieISOAutoControlManualMode? int8u
15867
- 746 MovieISOAutoManualMode? int16u
15868
- 820 MovieActiveD-Lighting? int8u
15869
- 822 MovieHighISONoiseReduction? int8u
15870
- 828 MovieFlickerReduction int8u
15871
- 830 MovieMeteringMode? int8u
15872
- 832 MovieFocusMode? int8u
15873
- 834 MovieAFAreaMode int8u
15874
- 836 MovieVRMode? int8u
15875
- 840 MovieElectronicVR? int8u
15876
- 842 MovieSoundRecording? int8u
15877
- 844 MicrophoneSensitivity? int8u
15878
- 846 MicrophoneAttenuator? int8u
15879
- 848 MicrophoneFrequencyResponse? int8u
15880
- 850 WindNoiseReduction? int8u
15881
- 882 MovieFrameSize? int8u
15882
- 884 MovieFrameRate? int8u
15883
- 886 MicrophoneJackPower? int8u
15884
- 887 MovieDXCropAlert? int8u
15885
- 888 MovieSubjectDetection? int8u
15886
- 896 MovieHighResZoom? int8u
15824
+ 0 MenuSettingsZ8 Nikon MenuSettingsZ8
15887
15825
  943 CustomSettingsZ8 NikonCustom SettingsZ8
15888
15826
  1684 TimeZone int8u
15889
15827
  1690 MonitorBrightness? int8u
@@ -15936,9 +15874,9 @@ These tags are used by the Z8 firmware 1.00.
15936
15874
  1890 USBPowerDelivery? int8u
15937
15875
  1899 SensorShield? int8u
15938
15876
 
15939
- =head3 Nikon MenuSettingsZ8v2 Tags
15877
+ =head3 Nikon MenuSettingsZ8 Tags
15940
15878
 
15941
- These tags are used by the Z8 firmware 1.00.
15879
+ These tags are common to all Z8 firmware versions.
15942
15880
 
15943
15881
  Index1 Tag Name Writable
15944
15882
  ------ -------- --------
@@ -16000,12 +15938,20 @@ These tags are used by the Z8 firmware 1.00.
16000
15938
  846 MicrophoneAttenuator? int8u
16001
15939
  848 MicrophoneFrequencyResponse? int8u
16002
15940
  850 WindNoiseReduction? int8u
16003
- 878 MovieFrameSize? int8u
16004
- 880 MovieFrameRate? int8u
15941
+ 882 MovieFrameSize? int8u
15942
+ 884 MovieFrameRate? int8u
16005
15943
  886 MicrophoneJackPower? int8u
16006
15944
  887 MovieDXCropAlert? int8u
16007
15945
  888 MovieSubjectDetection? int8u
16008
15946
  896 MovieHighResZoom? int8u
15947
+
15948
+ =head3 Nikon MenuSettingsZ8v2 Tags
15949
+
15950
+ These tags are used by the Z8 firmware 2.00 and 2.10.
15951
+
15952
+ Index1 Tag Name Writable
15953
+ ------ -------- --------
15954
+ 0 MenuSettingsZ8 Nikon MenuSettingsZ8
16009
15955
  943 CustomSettingsZ8 NikonCustom SettingsZ8
16010
15956
  1698 Language? int8u
16011
15957
  1700 TimeZone int8u
@@ -16099,8 +16045,6 @@ These tags are extracted from encrypted data in images from the Z9.
16099
16045
  MenuSettingsOffsetZ9v4 Nikon MenuSettingsZ9v3
16100
16046
  -
16101
16047
  Nikon MenuSettingsZ9v4
16102
- -
16103
- Nikon MenuSettingsZ9v5
16104
16048
 
16105
16049
  =head3 Nikon MenuSettingsZ9 Tags
16106
16050
 
@@ -16262,7 +16206,7 @@ These tags are used by the Z9 firmware 3.00.
16262
16206
 
16263
16207
  =head3 Nikon MenuSettingsZ9v4 Tags
16264
16208
 
16265
- These tags are used by the Z9 firmware 4.0.0 and 4.1.0.
16209
+ These tags are used by the Z9 firmware 4.00, 4.10, 5.00 and 5.10.
16266
16210
 
16267
16211
  Index1 Tag Name Writable
16268
16212
  ------ -------- --------
@@ -16402,148 +16346,6 @@ These tags are used by the Z9 firmware 4.0.0 and 4.1.0.
16402
16346
  2070 BracketButtonPlaybackMode int8u
16403
16347
  2072 FlashModeButtonPlaybackMode int8u
16404
16348
 
16405
- =head3 Nikon MenuSettingsZ9v5 Tags
16406
-
16407
- These tags are used by the Z9 firmware 5.1.
16408
-
16409
- Index1 Tag Name Writable
16410
- ------ -------- --------
16411
- 72 HighFrameRate int8u
16412
- 158 MultipleExposureMode int8u
16413
- 160 MultiExposureShots int8u
16414
- 208 Intervals int32u
16415
- 212 ShotsPerInterval int32u
16416
- 252 FocusShiftNumberShots int8u
16417
- 256 FocusShiftStepWidth int8u
16418
- 260 FocusShiftInterval int8u~
16419
- 264 FocusShiftExposureLock? int8u
16420
- 294 PhotoShootingMenuBank int8u
16421
- 296 ExtendedMenuBanks int8u
16422
- 332 PhotoShootingMenuBankImageArea int8u
16423
- 346 AutoISO int8u
16424
- 348 ISOAutoHiLimit? int16u
16425
- 350 ISOAutoFlashLimit? int16u
16426
- 358 ISOAutoShutterTime no
16427
- 440 MovieVignetteControl? int8u
16428
- 442 DiffractionCompensation int8u
16429
- 444 FlickerReductionShooting int8u
16430
- 448 FlashControlMode int8u
16431
- 450 FlashMasterCompensation? int8s
16432
- 454 FlashGNDistance? no
16433
- 458 FlashOutput? int8u
16434
- 552 AFAreaMode int8u
16435
- 554 VRMode int8u
16436
- 558 BracketSet int8u
16437
- 560 BracketProgram int8u
16438
- 562 BracketIncrement int8u
16439
- 574 HDR int8u
16440
- 580 SecondarySlotFunction int8u
16441
- 586 HDRLevel int8u
16442
- 590 Slot2JpgSize? int8u
16443
- 596 DXCropAlert int8u
16444
- 598 SubjectDetection int8u
16445
- 600 DynamicAFAreaSize int8u
16446
- 640 HighFrequencyFlickerReduction? int8u
16447
- 650 MovieImageArea? int8u & 0x01
16448
- 660 MovieType? int8u
16449
- 662 MovieISOAutoHiLimit? int16u
16450
- 664 MovieISOAutoControlManualMode? int8u
16451
- 666 MovieISOAutoManualMode? int16u
16452
- 740 MovieActiveD-Lighting? int8u
16453
- 742 MovieHighISONoiseReduction? int8u
16454
- 748 MovieFlickerReduction int8u
16455
- 750 MovieMeteringMode? int8u
16456
- 752 MovieFocusMode? int8u
16457
- 754 MovieAFAreaMode int8u
16458
- 756 MovieVRMode? int8u
16459
- 760 MovieElectronicVR? int8u
16460
- 762 MovieSoundRecording? int8u
16461
- 764 MicrophoneSensitivity? int8u
16462
- 766 MicrophoneAttenuator? int8u
16463
- 768 MicrophoneFrequencyResponse? int8u
16464
- 770 WindNoiseReduction? int8u
16465
- 792 MovieToneMap? int8u
16466
- 798 MovieFrameSize? int8u
16467
- 800 MovieFrameRate? int8u
16468
- 806 MicrophoneJackPower? int8u
16469
- 807 MovieDXCropAlert? int8u
16470
- 808 MovieSubjectDetection? int8u
16471
- 816 MovieHighResZoom? int8u
16472
- 851 CustomSettingsZ9v4 NikonCustom SettingsZ9v4
16473
- 1502 Language? int8u
16474
- 1504 TimeZone int8u
16475
- 1510 MonitorBrightness? int8u
16476
- 1532 AFFineTune? int8u
16477
- 1536 NonCPULens1FocalLength? int16s~
16478
- 1540 NonCPULens2FocalLength? int16s~
16479
- 1542 NonCPULens3FocalLength? int16s~
16480
- 1548 NonCPULens4FocalLength? int16s~
16481
- 1552 NonCPULens5FocalLength? int16s~
16482
- 1556 NonCPULens6FocalLength? int16s~
16483
- 1560 NonCPULens7FocalLength? int16s~
16484
- 1564 NonCPULens8FocalLength? int16s~
16485
- 1568 NonCPULens9FocalLength? int16s~
16486
- 1572 NonCPULens10FocalLength? int16s~
16487
- 1576 NonCPULens11FocalLength? int16s~
16488
- 1580 NonCPULens12FocalLength? int16s~
16489
- 1584 NonCPULens13FocalLength? int16s~
16490
- 1588 NonCPULens14FocalLength? int16s~
16491
- 1592 NonCPULens15FocalLength? int16s~
16492
- 1596 NonCPULens16FocalLength? int16s~
16493
- 1600 NonCPULens17FocalLength? int16s~
16494
- 1604 NonCPULens18FocalLength? int16s~
16495
- 1608 NonCPULens19FocalLength? int16s~
16496
- 1612 NonCPULens20FocalLength? int16s~
16497
- 1616 NonCPULens1MaxAperture? int16s~
16498
- 1620 NonCPULens2MaxAperture? int16s~
16499
- 1624 NonCPULens3MaxAperture? int16s~
16500
- 1628 NonCPULens4MaxAperture? int16s~
16501
- 1632 NonCPULens5MaxAperture? int16s~
16502
- 1636 NonCPULens6MaxAperture? int16s~
16503
- 1640 NonCPULens7MaxAperture? int16s~
16504
- 1644 NonCPULens8MaxAperture? int16s~
16505
- 1648 NonCPULens9MaxAperture? int16s~
16506
- 1652 NonCPULens10MaxAperture? int16s~
16507
- 1656 NonCPULens11MaxAperture? int16s~
16508
- 1660 NonCPULens12MaxAperture? int16s~
16509
- 1664 NonCPULens13MaxAperture? int16s~
16510
- 1668 NonCPULens14MaxAperture? int16s~
16511
- 1672 NonCPULens15MaxAperture? int16s~
16512
- 1676 NonCPULens16MaxAperture? int16s~
16513
- 1680 NonCPULens17MaxAperture? int16s~
16514
- 1684 NonCPULens18MaxAperture? int16s~
16515
- 1688 NonCPULens19MaxAperture? int16s~
16516
- 1692 NonCPULens20MaxAperture? int16s~
16517
- 1708 HDMIOutputResolution int8u
16518
- 1721 SetClockFromLocationData? int8u
16519
- 1728 AirplaneMode? int8u
16520
- 1729 EmptySlotRelease? int8u
16521
- 1764 EnergySavingMode? int8u
16522
- 1788 RecordLocationData? int8u
16523
- 1792 USBPowerDelivery? int8u
16524
- 1801 SensorShield? int8u
16525
- 1866 AutoCapturePreset int8u
16526
- 1868 FocusShiftAutoReset? int8u
16527
- 1926 PreReleaseBurstLength int8u
16528
- 1928 PostReleaseBurstLength int8u
16529
- 1942 VerticalISOButton int8u
16530
- 1944 ExposureCompensationButton int8u
16531
- 1946 ISOButton int8u
16532
- 2006 ViewModeShowEffectsOfSettings? int8u
16533
- 2008 DispButton int8u
16534
- 2052 ExposureDelay fixed32u~
16535
- 2056 CommandDialFrameAdvanceZoom? int8u
16536
- 2058 SubCommandDialFrameAdvanceZoom? int8u
16537
- 2060 PlaybackButton int8u
16538
- 2062 WBButton int8u
16539
- 2064 BracketButton int8u
16540
- 2066 FlashModeButton int8u
16541
- 2068 LensFunc1ButtonPlaybackMode int8u
16542
- 2070 LensFunc2ButtonPlaybackMode int8u
16543
- 2072 PlaybackButtonPlaybackMode int8u
16544
- 2074 BracketButtonPlaybackMode int8u
16545
- 2076 FlashModeButtonPlaybackMode int8u
16546
-
16547
16349
  =head3 Nikon ShotInfo Tags
16548
16350
 
16549
16351
  This information is encrypted for ShotInfoVersion 02xx, and some tags are
@@ -26516,6 +26318,57 @@ even if it is not listed in this table.
26516
26318
  YhiYloCorK1 no
26517
26319
  YhiYloCorK2 no
26518
26320
 
26321
+ =head3 Qualcomm DualCamera Tags
26322
+
26323
+ Found in JPEG APP4 "Qualcomm Dual Camera Attributes" written by some Nokia
26324
+ phones.
26325
+
26326
+ Tag Name Writable
26327
+ -------- --------
26328
+ AF_ROIHeight no
26329
+ AF_ROILeft no
26330
+ AF_ROITop no
26331
+ AF_ROIWidth no
26332
+ CAMIFCropHeight no
26333
+ CAMIFCropLeft no
26334
+ CAMIFCropTop no
26335
+ CAMIFCropWidth no
26336
+ CAMIF_ROIMapHeight no
26337
+ CAMIF_ROIMapLeft no
26338
+ CAMIF_ROIMapTop no
26339
+ CAMIF_ROIMapWidth no
26340
+ CPPCropHeight no
26341
+ CPPCropLeft no
26342
+ CPPCropTop no
26343
+ CPPCropWidth no
26344
+ CPP_ROIMapHeight no
26345
+ CPP_ROIMapLeft no
26346
+ CPP_ROIMapTop no
26347
+ CPP_ROIMapWidth no
26348
+ CurrentPipelineMirrorFlipSetting no
26349
+ CurrentPipelineRotationSetting no
26350
+ DDMCropHeight no
26351
+ DDMCropLeft no
26352
+ DDMCropTop no
26353
+ DDMCropWidth no
26354
+ FocalLengthRatio no
26355
+ ISPCropHeight no
26356
+ ISPCropLeft no
26357
+ ISPCropTop no
26358
+ ISPCropWidth no
26359
+ ISP_ROIMapHeight no
26360
+ ISP_ROIMapLeft no
26361
+ ISP_ROIMapTop no
26362
+ ISP_ROIMapWidth no
26363
+ SensorCropHeight no
26364
+ SensorCropLeft no
26365
+ SensorCropTop no
26366
+ SensorCropWidth no
26367
+ SensorROIMapHeight no
26368
+ SensorROIMapLeft no
26369
+ SensorROIMapTop no
26370
+ SensorROIMapWidth no
26371
+
26519
26372
  =head2 Jpeg2000 Tags
26520
26373
 
26521
26374
  The tags below are found in JPEG 2000 images and the C2PA CAI JUMBF metadata
@@ -40298,6 +40151,42 @@ Information extracted from MS Shell Link (Windows shortcut) files.
40298
40151
  ------ -------- --------
40299
40152
  8 CodePage no
40300
40153
 
40154
+ =head2 PCAP Tags
40155
+
40156
+ Tags extracted from CAP, PCAP and PCAPNG Packet Capture files.
40157
+
40158
+ Tag ID Tag Name Writable
40159
+ ------ -------- --------
40160
+ 0x0001 Comment no
40161
+ 0x0bac CustomOption1 no
40162
+ 0x0bad CustomOption2 no
40163
+ 0x4bac CustomOption3 no
40164
+ 0x4bad CustomOption3 no
40165
+ 'ByteOrder' ByteOrder no
40166
+ 'IDB-2' DeviceName no
40167
+ 'IDB-3' Description no
40168
+ 'IDB-4' IPv4Addr no
40169
+ 'IDB-5' IPv6Addr no
40170
+ 'IDB-6' MACAddr no
40171
+ 'IDB-7' EUIAddr no
40172
+ 'IDB-8' Speed no
40173
+ 'IDB-9' TimeStampResolution no
40174
+ 'IDB-10' TimeZone no
40175
+ 'IDB-11' Filter no
40176
+ 'IDB-12' OperatingSytem no
40177
+ 'IDB-13' FCSLen no
40178
+ 'IDB-14' TimeStampOffset no
40179
+ 'IDB-15' Hardware no
40180
+ 'IDB-16' TXSpeed no
40181
+ 'IDB-17' RXSpeed no
40182
+ 'IDB-18' TimezoneName no
40183
+ 'LinkType' LinkType no
40184
+ 'PCAPVersion' PCAPVersion no
40185
+ 'SHB-2' Hardware no
40186
+ 'SHB-3' OperatingSytem no
40187
+ 'SHB-4' UserApplication no
40188
+ 'TimeStamp' TimeStamp no
40189
+
40301
40190
  =head2 Font Tags
40302
40191
 
40303
40192
  This table contains a collection of tags found in font files of various
@@ -188,10 +188,10 @@ my %validValue = (
188
188
  0x115 => undef, # SamplesPerPixel
189
189
  0x116 => undef, # RowsPerStrip
190
190
  0x117 => undef, # StripByteCounts
191
- 0x11a => 'defined $val', # XResolution
192
- 0x11b => 'defined $val', # YResolution
191
+ # (optional as of 3.0) 0x11a => 'defined $val', # XResolution
192
+ # (optional as of 3.0) 0x11b => 'defined $val', # YResolution
193
193
  0x11c => undef, # PlanarConfiguration
194
- 0x128 => '$val =~ /^[123]$/', # ResolutionUnit
194
+ # (optional as of 3.0) 0x128 => '$val =~ /^[123]$/', # ResolutionUnit
195
195
  0x201 => undef, # JPEGInterchangeFormat
196
196
  0x202 => undef, # JPEGInterchangeFormatLength
197
197
  0x212 => undef, # YCbCrSubSampling
@@ -218,7 +218,7 @@ my %validValue = (
218
218
  ExifIFD => {
219
219
  0x9000 => 'defined $val and $val =~ /^\d{4}$/', # ExifVersion
220
220
  0x9101 => 'defined $val', # ComponentsConfiguration
221
- 0xa000 => 'defined $val', # FlashpixVersion
221
+ # (optional as of 3.0) 0xa000 => 'defined $val', # FlashpixVersion
222
222
  0xa001 => '$val == 1 or $val == 0xffff', # ColorSpace
223
223
  0xa002 => 'defined $val', # PixelXDimension
224
224
  0xa003 => 'defined $val', # PixelYDimension
@@ -25,9 +25,9 @@ my %crossDelete = (
25
25
  # mandatory tag default values
26
26
  my %mandatory = (
27
27
  IFD0 => {
28
- 0x011a => 72, # XResolution
29
- 0x011b => 72, # YResolution
30
- 0x0128 => 2, # ResolutionUnit (inches)
28
+ # (optional as of 3.0) 0x011a => 72, # XResolution
29
+ # (optional as of 3.0) 0x011b => 72, # YResolution
30
+ # (optional as of 3.0) 0x0128 => 2, # ResolutionUnit (inches)
31
31
  0x0213 => 1, # YCbCrPositioning (centered)
32
32
  # 0x8769 => ????, # ExifOffset
33
33
  },
@@ -40,7 +40,7 @@ my %mandatory = (
40
40
  ExifIFD => {
41
41
  0x9000 => '0232', # ExifVersion
42
42
  0x9101 => "1 2 3 0",# ComponentsConfiguration
43
- 0xa000 => '0100', # FlashpixVersion
43
+ # (optional as of 3.0) 0xa000 => '0100', # FlashpixVersion
44
44
  0xa001 => 0xffff, # ColorSpace (uncalibrated)
45
45
  # 0xa002 => ????, # ExifImageWidth
46
46
  # 0xa003 => ????, # ExifImageHeight
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.71';
53
+ $VERSION = '3.72';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -3818,8 +3818,22 @@ sub ParseXMPElement($$$;$$$$)
3818
3818
  my ($parseResource, %attrs, @attrs);
3819
3819
  # this hangs Perl (v5.18.4) for a specific capture string [patched in ExifTool 12.98]
3820
3820
  # while ($attrs =~ m/(\S+?)\s*=\s*(['"])(.*?)\2/sg) {
3821
- while ($attrs =~ /(\S+?)\s*=\s*(['"])/g) {
3822
- my ($attr, $quote) = ($1, $2);
3821
+ # this may hang Perl v5.26.3 (but not v5.18.4) if there is lots of garbage in the XMP [patched in 13.23]
3822
+ # while ($attrs =~ /(\S+?)\s*=\s*(['"])/g) {
3823
+ for (;;) {
3824
+ my ($attr, $quote);
3825
+ if (length($attrs) < 2000) { # (do it the easy way if attributes aren't stupid long)
3826
+ last unless $attrs =~ /(\S+)\s*=\s*(['"])/g;
3827
+ ($attr, $quote) = ($1, $2);
3828
+ } else {
3829
+ # 13.23 patch to avoid capturing tons of garbage if XMP is corrupted
3830
+ last unless $attrs =~ /=\s*(['"])/g;
3831
+ $quote = $1;
3832
+ my $p = pos($attrs) > 1000 ? pos($attrs) - 1000 : 0;
3833
+ my $tmp = substr($attrs, $p, pos($attrs)-$p);
3834
+ last unless $tmp =~ /(\S+)\s*=\s*$quote$/;
3835
+ $attr = $1;
3836
+ }
3823
3837
  my $p0 = pos($attrs);
3824
3838
  last unless $attrs =~ /$quote/g;
3825
3839
  my $val = substr($attrs, $p0, pos($attrs)-$p0-1);
@@ -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 $advFmtSelf);
31
31
 
32
- $VERSION = '13.22';
32
+ $VERSION = '13.24';
33
33
  $RELEASE = '';
34
34
  @ISA = qw(Exporter);
35
35
  %EXPORT_TAGS = (
@@ -155,9 +155,9 @@ sub ReadValue($$$;$$$);
155
155
  Real::Metafile Red RIFF AIFF ASF WTV DICOM FITS XISF MIE JSON HTML XMP::SVG
156
156
  Palm Palm::MOBI Palm::EXTH Torrent EXE EXE::PEVersion EXE::PEString
157
157
  EXE::DebugRSDS EXE::DebugNB10 EXE::Misc EXE::MachO EXE::PEF EXE::ELF EXE::AR
158
- EXE::CHM LNK Font VCard Text VCard::VCalendar VCard::VNote RSRC Rawzor ZIP
159
- ZIP::GZIP ZIP::RAR ZIP::RAR5 RTF OOXML iWork ISO FLIR::AFF FLIR::FPF MacOS
160
- MacOS::MDItem FlashPix::DocTable
158
+ EXE::CHM LNK PCAP Font VCard Text VCard::VCalendar VCard::VNote RSRC Rawzor
159
+ ZIP ZIP::GZIP ZIP::RAR ZIP::RAR5 RTF OOXML iWork ISO FLIR::AFF FLIR::FPF
160
+ MacOS MacOS::MDItem FlashPix::DocTable
161
161
  );
162
162
 
163
163
  # alphabetical list of current Lang modules
@@ -199,8 +199,8 @@ $defaultLang = 'en'; # default language
199
199
  LFP HTML VRD RTF FITS XISF XCF DSS QTIF FPX PICT ZIP GZIP PLIST
200
200
  RAR 7Z BZ2 CZI TAR EXE EXR HDR CHM LNK WMF AVC DEX DPX RAW Font
201
201
  JUMBF RSRC M2TS MacOS PHP PCX DCX DWF DWG DXF WTV Torrent VCard
202
- LRI R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS JSON MP3 DICOM PCD
203
- NKA ICO TXT AAC);
202
+ LRI R3D AA PDB PFM2 MRC LIF JXL MOI ISO ALIAS PCAP JSON MP3
203
+ DICOM PCD NKA ICO TXT AAC);
204
204
 
205
205
  # file types that we can write (edit)
206
206
  my @writeTypes = qw(JPEG TIFF GIF CRW MRW ORF RAF RAW PNG MIE PSD XMP PPM EPS
@@ -263,6 +263,7 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
263
263
  BPG => ['BPG', 'Better Portable Graphics'],
264
264
  BTF => ['BTF', 'Big Tagged Image File Format'], #(unofficial)
265
265
  BZ2 => ['BZ2', 'BZIP2 archive'],
266
+ CAP => 'PCAP',
266
267
  C2PA => ['JUMBF','Coalition for Content Provenance and Authenticity'],
267
268
  CHM => ['CHM', 'Microsoft Compiled HTML format'],
268
269
  CIFF => ['CRW', 'Camera Image File Format'],
@@ -454,6 +455,8 @@ my %createTypes = map { $_ => 1 } qw(XMP ICC MIE VRD DR4 EXIF EXV);
454
455
  PAC => ['RIFF', 'Lossless Predictive Audio Compression'],
455
456
  PAGES => ['ZIP', 'Apple Pages document'],
456
457
  PBM => ['PPM', 'Portable BitMap'],
458
+ PCAP => ['PCAP', 'Packet Capture'],
459
+ PCAPNG => ['PCAP', 'Packet Capture Next Generation'],
457
460
  PCD => ['PCD', 'Kodak Photo CD Image Pac'],
458
461
  PCT => 'PICT',
459
462
  PCX => ['PCX', 'PC Paintbrush'],
@@ -744,6 +747,7 @@ my %fileDescription = (
744
747
  OTF => 'application/font-otf',
745
748
  PAGES=> 'application/x-iwork-pages-sffpages',
746
749
  PBM => 'image/x-portable-bitmap',
750
+ PCAP => 'application/vnd.tcpdump.pcap',
747
751
  PCD => 'image/x-photo-cd',
748
752
  PCX => 'image/pcx',
749
753
  PDB => 'application/vnd.palm',
@@ -980,6 +984,7 @@ $testLen = 1024; # number of bytes to read when testing for magic number
980
984
  NKA => 'NIKONADJ',
981
985
  OGG => '(OggS|ID3)',
982
986
  ORF => '(II|MM)',
987
+ PCAP => '\xa1\xb2(\xc3\xd4|\x3c\x4d)\0.\0.|(\xd4\xc3|\x4d\x3c)\xb2\xa1.\0.\0|\x0a\x0d\x0d\x0a.{4}(\x1a\x2b\x3c\x4d|\x4d\x3c\x2b\x1a)|GMBU\0\x02',
983
988
  # PCD => signature is at byte 2048
984
989
  PCX => '\x0a[\0-\x05]\x01[\x01\x02\x04\x08].{64}[\0-\x02]',
985
990
  PDB => '.{60}(\.pdfADBE|TEXtREAd|BVokBDIC|DB99DBOS|PNRdPPrs|DataPPrs|vIMGView|PmDBPmDB|InfoINDB|ToGoToGo|SDocSilX|JbDbJBas|JfDbJFil|DATALSdb|Mdb1Mdb1|BOOKMOBI|DataPlkr|DataSprd|SM01SMem|TEXtTlDc|InfoTlIf|DataTlMl|DataTlPt|dataTDBP|TdatTide|ToRaTRPW|zTXTGPlm|BDOCWrdS)',
@@ -7967,6 +7972,12 @@ sub ProcessJPEG($$;$)
7967
7972
  $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7968
7973
  undef $scalado;
7969
7974
  }
7975
+ } elsif ($$segDataPt =~ /^Qualcomm Dual Camera Attributes/) {
7976
+ $dumpType = 'Qualcomm Dual Camera';
7977
+ my $tagTablePtr = GetTagTable('Image::ExifTool::Qualcomm::DualCamera');
7978
+ DirStart(\%dirInfo, 31);
7979
+ $dirInfo{DirName} = 'Qualcomm Dual Camera';
7980
+ $self->ProcessDirectory(\%dirInfo, $tagTablePtr);
7970
7981
  } elsif ($$segDataPt =~ /^FPXR\0/) {
7971
7982
  next if $fast > 1; # skip processing for very fast
7972
7983
  $dumpType = 'FPXR';
@@ -8945,7 +8956,7 @@ sub ProcessDirectory($$$;$)
8945
8956
  ($$dirInfo{DirLen} or not defined $$dirInfo{DirLen}))
8946
8957
  {
8947
8958
  my $addr = $$dirInfo{DirStart} + $$dirInfo{DataPos} + ($$dirInfo{Base}||0) + $$self{BASE};
8948
- if ($$self{PROCESSED}{$addr}) {
8959
+ if ($$self{PROCESSED}{$addr} and not $$dirInfo{NotDup}) {
8949
8960
  $self->Warn("$dirName pointer references previous $$self{PROCESSED}{$addr} directory");
8950
8961
  # patch for bug in Windows phone 7.5 O/S that writes incorrect InteropIFD pointer
8951
8962
  return 0 unless $dirName eq 'GPS' and $$self{PROCESSED}{$addr} eq 'InteropIFD';
@@ -9175,8 +9186,9 @@ sub HandleTag($$$$;%)
9175
9186
  } elsif ($parms{MakeTagInfo}) {
9176
9187
  $self->VPrint(0, $$self{INDENT}, "[adding $tag]\n") if $verbose;
9177
9188
  my $name = $tag;
9178
- $name =~ s/([^A-Za-z])([a-z])/$1\u$2/g; # capitalize words
9179
- $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters
9189
+ $name =~ s/([A-Z]) ([A-Z][ A-Z])/${1}_$2/g; # underline between acronyms
9190
+ $name =~ s/([^A-Za-z])([a-z])/$1\u$2/g; # capitalize words
9191
+ $name =~ tr/-_a-zA-Z0-9//dc; # remove illegal characters
9180
9192
  $name = "Tag$name" if length($name) < 2 or $name =~ /^[-0-9]/;
9181
9193
  $tagInfo = { Name => ucfirst($name) };
9182
9194
  AddTagToTable($tagTablePtr, $tag, $tagInfo);
@@ -9970,6 +9982,7 @@ sub ProcessBinaryData($$$)
9970
9982
  $subdirBase = eval($$subdir{Base}) + $base;
9971
9983
  }
9972
9984
  my $start = $$subdir{Start} || 0;
9985
+ my $notDup;
9973
9986
  if ($start =~ /\$/) {
9974
9987
  # ignore directories with a zero offset (ie. missing Nikon ShotInfo entries)
9975
9988
  next unless $val;
@@ -9980,6 +9993,7 @@ sub ProcessBinaryData($$$)
9980
9993
  $len = $dataLen - $start unless $len and $len <= $dataLen - $start;
9981
9994
  } else {
9982
9995
  $start += $dirStart + $entry;
9996
+ $notDup = 1,
9983
9997
  }
9984
9998
  my %subdirInfo = (
9985
9999
  DataPt => $dataPt,
@@ -9988,6 +10002,7 @@ sub ProcessBinaryData($$$)
9988
10002
  DirStart => $start,
9989
10003
  DirLen => $len,
9990
10004
  Base => $subdirBase,
10005
+ NotDup => $notDup,
9991
10006
  );
9992
10007
  delete $$self{NO_UNKNOWN};
9993
10008
  $self->ProcessDirectory(\%subdirInfo, $subTablePtr, $$subdir{ProcessProc});