Revert "ifd_enumerate.go: Eliminate unnecessary buffering"

This reverts commit 4692087c1a8840c3d1593b3df89a19ea2c8d31c4.

Broke unit-tests. Will unbreak shortly.
This commit is contained in:
Dustin Oprea 2020-07-09 16:18:24 -04:00
parent 4692087c1a
commit 3bd3dd677b

View File

@ -77,6 +77,7 @@ type byteParser struct {
byteOrder binary.ByteOrder byteOrder binary.ByteOrder
addressableData []byte addressableData []byte
ifdOffset uint32 ifdOffset uint32
buffer *bytes.Buffer
currentOffset uint32 currentOffset uint32
} }
@ -90,6 +91,7 @@ func newByteParser(addressableData []byte, byteOrder binary.ByteOrder, ifdOffset
bp = &byteParser{ bp = &byteParser{
addressableData: addressableData, addressableData: addressableData,
byteOrder: byteOrder, byteOrder: byteOrder,
buffer: bytes.NewBuffer(addressableData[ifdOffset:]),
currentOffset: ifdOffset, currentOffset: ifdOffset,
} }
@ -109,12 +111,16 @@ func (bp *byteParser) getUint16() (value uint16, raw []byte, err error) {
// TODO(dustin): Add test // TODO(dustin): Add test
needBytes := 2 needBytes := 2
offset := 0
raw = make([]byte, needBytes)
if bp.currentOffset+needBytes >= len(bp.addressableData) { for offset < needBytes {
return 0, nil, io.EOF n, err := bp.buffer.Read(raw[offset:])
log.PanicIf(err)
offset += n
} }
raw = addressableData[bp.currentOffset : bp.currentOffset+needBytes]
value = bp.byteOrder.Uint16(raw) value = bp.byteOrder.Uint16(raw)
bp.currentOffset += uint32(needBytes) bp.currentOffset += uint32(needBytes)
@ -135,13 +141,17 @@ func (bp *byteParser) getUint32() (value uint32, raw []byte, err error) {
// TODO(dustin): Add test // TODO(dustin): Add test
needBytes := 4 needBytes := 4
offset := 0
raw = make([]byte, needBytes)
if bp.currentOffset+needBytes >= len(bp.addressableData) { for offset < needBytes {
return 0, nil, io.EOF n, err := bp.buffer.Read(raw[offset:])
log.PanicIf(err)
offset += n
} }
raw = addressableData[bp.currentOffset : bp.currentOffset+needBytes] value = bp.byteOrder.Uint32(raw)
value = bp.byteOrder.Uint16(raw)
bp.currentOffset += uint32(needBytes) bp.currentOffset += uint32(needBytes)
@ -158,6 +168,7 @@ func (bp *byteParser) CurrentOffset() uint32 {
// containers in the EXIF blob. // containers in the EXIF blob.
type IfdEnumerate struct { type IfdEnumerate struct {
exifData []byte exifData []byte
buffer *bytes.Buffer
byteOrder binary.ByteOrder byteOrder binary.ByteOrder
tagIndex *TagIndex tagIndex *TagIndex
ifdMapping *exifcommon.IfdMapping ifdMapping *exifcommon.IfdMapping
@ -168,6 +179,7 @@ type IfdEnumerate struct {
func NewIfdEnumerate(ifdMapping *exifcommon.IfdMapping, tagIndex *TagIndex, exifData []byte, byteOrder binary.ByteOrder) *IfdEnumerate { func NewIfdEnumerate(ifdMapping *exifcommon.IfdMapping, tagIndex *TagIndex, exifData []byte, byteOrder binary.ByteOrder) *IfdEnumerate {
return &IfdEnumerate{ return &IfdEnumerate{
exifData: exifData, exifData: exifData,
buffer: bytes.NewBuffer(exifData),
byteOrder: byteOrder, byteOrder: byteOrder,
ifdMapping: ifdMapping, ifdMapping: ifdMapping,
tagIndex: tagIndex, tagIndex: tagIndex,