Now a specific error for unparseable undefined tags

for/master
Dustin Oprea 2020-05-02 16:23:19 -04:00
parent 73303ea590
commit 45986dbda3
4 changed files with 23 additions and 3 deletions

View File

@ -113,6 +113,8 @@ func (ite *IfdTagEntry) GetRawBytes() (rawBytes []byte, err error) {
if err != nil { if err != nil {
if err == exifcommon.ErrUnhandledUndefinedTypedTag { if err == exifcommon.ErrUnhandledUndefinedTypedTag {
ite.setIsUnhandledUnknown(true) ite.setIsUnhandledUnknown(true)
} else if err == exifundefined.ErrUnparseableValue {
return nil, err
} else { } else {
log.Panic(err) log.Panic(err)
} }
@ -148,7 +150,7 @@ func (ite *IfdTagEntry) Value() (value interface{}, err error) {
value, err = exifundefined.Decode(valueContext) value, err = exifundefined.Decode(valueContext)
if err != nil { if err != nil {
if err == exifcommon.ErrUnhandledUndefinedTypedTag { if err == exifcommon.ErrUnhandledUndefinedTypedTag || err == exifundefined.ErrUnparseableValue {
return nil, err return nil, err
} }

View File

@ -49,7 +49,13 @@ func Decode(valueContext *exifcommon.ValueContext) (value EncodeableValue, err e
} }
value, err = decoder.Decode(valueContext) value, err = decoder.Decode(valueContext)
log.PanicIf(err) if err != nil {
if err == ErrUnparseableValue {
return nil, err
}
log.Panic(err)
}
return value, nil return value, nil
} }

View File

@ -1,6 +1,8 @@
package exifundefined package exifundefined
import ( import (
"errors"
"encoding/binary" "encoding/binary"
"github.com/dsoprea/go-exif/v2/common" "github.com/dsoprea/go-exif/v2/common"
@ -10,6 +12,10 @@ const (
UnparseableUnknownTagValuePlaceholder = "!UNKNOWN" UnparseableUnknownTagValuePlaceholder = "!UNKNOWN"
) )
var (
ErrUnparseableValue = errors.New("unparseable undefined tag")
)
// UndefinedValueEncoder knows how to encode an undefined-type tag's value to // UndefinedValueEncoder knows how to encode an undefined-type tag's value to
// bytes. // bytes.
type UndefinedValueEncoder interface { type UndefinedValueEncoder interface {

View File

@ -127,7 +127,13 @@ func GetFlatExifData(exifData []byte) (exifTags []ExifTag, err error) {
} }
valueBytes, err := ite.GetRawBytes() valueBytes, err := ite.GetRawBytes()
log.PanicIf(err) if err != nil {
if err == exifundefined.ErrUnparseableValue {
continue
}
log.Panic(err)
}
value, err := ite.Value() value, err := ite.Value()
if err != nil { if err != nil {