62 lines
2.7 KiB
Diff
62 lines
2.7 KiB
Diff
From d3c2b9938583440f87ce9115de5a7e8cd8f8db57 Mon Sep 17 00:00:00 2001
|
|
From: clanmills <robin@clanmills.com>
|
|
Date: Sun, 11 Jun 2017 11:56:20 +0100
|
|
Subject: [PATCH] #1297 Fix submitted.
|
|
|
|
---
|
|
src/error.cpp | 2 ++
|
|
src/image.cpp | 11 ++++++-----
|
|
2 files changed, 8 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/src/image.cpp b/src/image.cpp
|
|
index 0d8280455..0db66eb04 100644
|
|
--- a/src/image.cpp
|
|
+++ b/src/image.cpp
|
|
@@ -332,7 +332,7 @@ namespace Exiv2 {
|
|
|
|
static bool typeValid(uint16_t type)
|
|
{
|
|
- return type >= 1 && type <= 13 ;
|
|
+ return type >= 1 && type <= 13 ;
|
|
}
|
|
|
|
void Image::printIFDStructure(BasicIo& io, std::ostream& out, Exiv2::PrintStructureOption option,uint32_t start,bool bSwap,char c,int depth)
|
|
@@ -352,12 +352,12 @@ namespace Exiv2 {
|
|
uint16_t dirLength = byteSwap2(dir,0,bSwap);
|
|
|
|
bool tooBig = dirLength > 500;
|
|
+ if ( tooBig ) throw Error(55);
|
|
|
|
if ( bFirst && bPrint ) {
|
|
out << Internal::indent(depth) << Internal::stringFormat("STRUCTURE OF TIFF FILE (%c%c): ",c,c) << io.path() << std::endl;
|
|
if ( tooBig ) out << Internal::indent(depth) << "dirLength = " << dirLength << std::endl;
|
|
}
|
|
- if (tooBig) break;
|
|
|
|
// Read the dictionary
|
|
for ( int i = 0 ; i < dirLength ; i ++ ) {
|
|
@@ -374,10 +374,11 @@ namespace Exiv2 {
|
|
uint32_t count = byteSwap4(dir,4,bSwap);
|
|
uint32_t offset = byteSwap4(dir,8,bSwap);
|
|
|
|
- // Break for unknown tag types else we may get segfault.
|
|
+ // Break for unknown tag types else we may segfault.
|
|
if ( !typeValid(type) ) {
|
|
std::cerr << "invalid type value detected in Image::printIFDStructure: " << type << std::endl;
|
|
start = 0; // break from do loop
|
|
+ throw Error(56);
|
|
break; // break from for loop
|
|
}
|
|
|
|
@@ -411,8 +412,8 @@ namespace Exiv2 {
|
|
if ( bPrint ) {
|
|
uint32_t address = start + 2 + i*12 ;
|
|
out << Internal::indent(depth)
|
|
- << Internal::stringFormat("%8u | %#06x %-25s |%10s |%9u |%10u | "
|
|
- ,address,tag,tagName(tag,25),typeName(type),count,offset);
|
|
+ << Internal::stringFormat("%8u | %#06x %-25s |%10s |%9u |%10u | "
|
|
+ ,address,tag,tagName(tag,25),typeName(type),count,offset);
|
|
if ( isShortType(type) ){
|
|
for ( size_t k = 0 ; k < kount ; k++ ) {
|
|
out << sp << byteSwap2(buf,k*size,bSwap);
|