diff --git a/bigtiff/parse.cpp b/bigtiff/parse.cpp index 234d4b6a..c2b82a1e 100644 --- a/bigtiff/parse.cpp +++ b/bigtiff/parse.cpp @@ -369,12 +369,16 @@ void printIFD(Exiv2::BasicIo& io, std::ostream& out, Exiv2::PrintStructureOption sp = kount == count ? "" : " ..."; out << sp << std::endl; - if ( option == Exiv2::kpsRecursive && (tag == 0x8769 /* ExifTag */ || tag == 0x014a/*SubIFDs*/ || type == tiffIfd) ) + if ( option == Exiv2::kpsRecursive && + (tag == 0x8769 /* ExifTag */ || tag == 0x014a/*SubIFDs*/ || type == tiffIfd || type == tiffIfd8) ) { for ( size_t k = 0 ; k < count ; k++ ) { - size_t restore = io.tell(); - uint32_t offset = conditional_byte_swap_4_array<32>(buf.pData_, k*size, bSwap); + const size_t restore = io.tell(); + const uint64_t offset = type == tiffIfd8? + conditional_byte_swap_4_array<64>(buf.pData_, k*size, bSwap): + conditional_byte_swap_4_array<32>(buf.pData_, k*size, bSwap); + std::cerr << "tag = " << Exiv2::Internal::stringFormat("%#x",tag) << std::endl; printIFD(io, out, option, offset, bSwap, depth); io.seek(restore, Exiv2::BasicIo::beg);