@@ -195,7 +195,7 @@ class IDFEntries {
195
195
}
196
196
197
197
_decodeIDFEntries ( buffer , tags , offset , log = false ) {
198
- let pos = 2 ;
198
+ let pos = 2 + offset ;
199
199
200
200
const entries = { } ;
201
201
@@ -205,7 +205,7 @@ class IDFEntries {
205
205
const uint32 = ( pos ) =>
206
206
this . bigEndian ? readUInt32BE ( buffer , pos ) : readUInt32LE ( buffer , pos ) ;
207
207
208
- const numberOfEntries = uint16 ( 0 ) ;
208
+ const numberOfEntries = uint16 ( offset ) ;
209
209
210
210
for ( let i = 0 ; i < numberOfEntries ; i ++ ) {
211
211
const tagAddress = buffer . slice ( pos , pos + 2 ) ;
@@ -217,12 +217,10 @@ class IDFEntries {
217
217
let dataValue = buffer . slice ( pos + 8 , pos + 12 ) ;
218
218
219
219
if ( dataLength > 4 ) {
220
- const valueOffset = this . bigEndian
220
+ const dataOffset = this . bigEndian
221
221
? readUInt32BE ( dataValue , 0 )
222
222
: readUInt32LE ( dataValue , 0 ) ;
223
223
224
- const dataOffset = valueOffset - offset ;
225
-
226
224
dataValue = buffer . slice ( dataOffset , dataOffset + dataLength ) ;
227
225
}
228
226
@@ -251,23 +249,20 @@ class IDFEntries {
251
249
return { } ;
252
250
}
253
251
254
- const firstIFDBuffer = buffer . slice ( offsetToFirstIFD ) ;
255
- const entries = this . _decodeIDFEntries ( firstIFDBuffer , tags . ifd , offsetToFirstIFD ) ;
252
+ const entries = this . _decodeIDFEntries ( buffer , tags . ifd , offsetToFirstIFD ) ;
256
253
const { exifIFDPointer, gpsInfoIFDPointer } = entries ;
257
254
258
255
if ( exifIFDPointer ) {
259
- const exifIFDBuffer = buffer . slice ( exifIFDPointer ) ;
260
256
entries . subExif = this . _decodeIDFEntries (
261
- exifIFDBuffer ,
257
+ buffer ,
262
258
tags . ifd ,
263
259
exifIFDPointer ,
264
260
) ;
265
261
}
266
262
267
263
if ( gpsInfoIFDPointer ) {
268
264
const gps = gpsInfoIFDPointer ;
269
- const gpsBuffer = buffer . slice ( gps ) ;
270
- entries . gpsInfo = this . _decodeIDFEntries ( gpsBuffer , tags . gps , gps , true ) ;
265
+ entries . gpsInfo = this . _decodeIDFEntries ( buffer , tags . gps , gps , true ) ;
271
266
}
272
267
273
268
stream . pos += parent . parent . length - 16 ;
0 commit comments