Merge pull request #1929 from postscript-dev/fix_exiv2_-pR
Fix `exiv2 -pR` for Sony images (#1805)
This commit is contained in:
+7
-2
@@ -477,7 +477,11 @@ namespace Exiv2 {
|
||||
io.seekOrThrow(offset, BasicIo::beg, kerCorruptedMetadata); // position
|
||||
io.readOrThrow(bytes, jump, kerCorruptedMetadata) ; // read
|
||||
bytes[jump]=0 ;
|
||||
if ( ::strcmp("Nikon",chars) == 0 ) {
|
||||
|
||||
bool bNikon = ::strcmp("Nikon" ,chars) == 0;
|
||||
bool bSony = ::strcmp("SONY DSC ",chars) == 0;
|
||||
|
||||
if ( bNikon ) {
|
||||
// tag is an embedded tiff
|
||||
const long byteslen = count-jump;
|
||||
DataBuf bytes(byteslen); // allocate a buffer
|
||||
@@ -486,8 +490,9 @@ namespace Exiv2 {
|
||||
printTiffStructure(memIo,out,option,depth);
|
||||
} else {
|
||||
// tag is an IFD
|
||||
uint32_t punt = bSony ? 12 : 0 ;
|
||||
io.seekOrThrow(0, BasicIo::beg, kerCorruptedMetadata); // position
|
||||
printIFDStructure(io,out,option,offset,bSwap,c,depth);
|
||||
printIFDStructure(io,out,option,offset+punt,bSwap,c,depth);
|
||||
}
|
||||
|
||||
io.seekOrThrow(restore, BasicIo::beg, kerCorruptedMetadata); // restore
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import unittest
|
||||
import system_tests
|
||||
from system_tests import CaseMeta, path, check_no_ASAN_UBSAN_errors
|
||||
|
||||
# Check that `exiv2 -pr` works for different file types.
|
||||
# ExifTool has a list of markers that appear in the headers:
|
||||
# https://exiftool.org/makernote_types.html
|
||||
|
||||
@unittest.skip("Skipping test using option -pR (only for Debug mode)")
|
||||
class exiv2pRHeaderTest(metaclass=CaseMeta):
|
||||
|
||||
url = "https://github.com/Exiv2/exiv2/issues/1805"
|
||||
|
||||
filename = system_tests.path("$data_path/exiv2-SonyDSC-HX60V.exv") # Uses marker: "SONY DSC "
|
||||
commands = ["$exiv2 -pR " + filename]
|
||||
|
||||
stderr = [""]
|
||||
retval = [0]
|
||||
|
||||
compare_stdout = check_no_ASAN_UBSAN_errors
|
||||
Reference in New Issue
Block a user