From 061c6b48d88323353d890c458e1b2236fcc962b9 Mon Sep 17 00:00:00 2001 From: Dustin Oprea Date: Sun, 21 Apr 2019 16:43:29 -0400 Subject: [PATCH] exif.go: Just return ErrNoExif without panicking - For well-defined, high-level errors we prefer to not wrap them with stacktraces if the stacktraces add little value. It just makes it more labor-intensive to handle those errors effectively (especially external ones). --- exif.go | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/exif.go b/exif.go index 77d0be9..ae40f01 100644 --- a/exif.go +++ b/exif.go @@ -79,12 +79,12 @@ func SearchAndExtractExif(data []byte) (rawExif []byte, err error) { foundAt = i break } else if log.Is(err, ErrNoExif) == false { - log.Panic(err) + return nil, err } } if foundAt == -1 { - log.Panic(ErrNoExif) + return nil, ErrNoExif } return data[foundAt:], nil @@ -144,7 +144,7 @@ func ParseExifHeader(data []byte) (eh ExifHeader, err error) { if len(data) < 2 { exifLogger.Warningf(nil, "Not enough data for EXIF header (1): (%d)", len(data)) - log.Panic(ErrNoExif) + return eh, ErrNoExif } byteOrderBytes := [2]byte{data[0], data[1]} @@ -152,24 +152,24 @@ func ParseExifHeader(data []byte) (eh ExifHeader, err error) { byteOrder, found := ByteOrderLookup[byteOrderBytes] if found == false { // exifLogger.Warningf(nil, "EXIF byte-order not recognized: [%v]", byteOrderBytes) - log.Panic(ErrNoExif) + return eh, ErrNoExif } if len(data) < 4 { exifLogger.Warningf(nil, "Not enough data for EXIF header (2): (%d)", len(data)) - log.Panic(ErrNoExif) + return eh, ErrNoExif } fixedBytes := [2]byte{data[2], data[3]} expectedFixedBytes := ExifFixedBytesLookup[byteOrder] if fixedBytes != expectedFixedBytes { // exifLogger.Warningf(nil, "EXIF header fixed-bytes should be [%v] but are: [%v]", expectedFixedBytes, fixedBytes) - log.Panic(ErrNoExif) + return eh, ErrNoExif } if len(data) < 2 { exifLogger.Warningf(nil, "Not enough data for EXIF header (3): (%d)", len(data)) - log.Panic(ErrNoExif) + return eh, ErrNoExif } firstIfdOffset := byteOrder.Uint32(data[4:8])