diff --git a/index.js b/index.js index 3fbc328..eefd0e4 100644 --- a/index.js +++ b/index.js @@ -2,7 +2,7 @@ var tags = require('./tags'); module.exports = function (buffer) { var startingOffset = 0; - if (buffer.toString('ascii', 0, 3) !== 'MM\0' && buffer.toString('ascii', 0, 3) !== 'II\0') { + if (buffer.toString('ascii', 0, 3) !== 'MM\0' && buffer.toString('ascii', 0, 3) !== 'II\x2a') { startingOffset = 6; if (buffer.toString('ascii', 0, 5) !== 'Exif\0') throw new Error('Invalid EXIF data: buffer should start with "Exif", "MM" or "II".'); diff --git a/test/data/little-endian.exif b/test/data/little-endian.exif new file mode 100644 index 0000000..e9f2f8e Binary files /dev/null and b/test/data/little-endian.exif differ diff --git a/test/index.js b/test/index.js index a4b4573..8f75ac3 100644 --- a/test/index.js +++ b/test/index.js @@ -8,6 +8,7 @@ var tetons = fs.readFileSync(__dirname + '/data/tetons.exif'); var IMG_0774 = fs.readFileSync(__dirname + '/data/IMG_0774.exif'); var pngWithExif = fs.readFileSync(__dirname + '/data/png-exif.exif'); var non_ascii = fs.readFileSync(__dirname + '/data/non-ascii.exif'); +var littleEndian = fs.readFileSync(__dirname + '/data/little-endian.exif'); describe('exif-reader', function () { it('should read tiff and exif data', function () { @@ -234,6 +235,29 @@ describe('exif-reader', function () { }); }); + it('should read little endian data', function () { + expect(exif(littleEndian), 'to equal', { + bigEndian: false, + Image: { + Orientation: 1, + XResolution: 25.4, + YResolution: 25.4, + ResolutionUnit: 2, + Software: 'sharp', + YCbCrPositioning: 1, + ExifTag: 120 + }, + Photo: { + ExifVersion: Buffer.from([0x30, 0x32, 0x31, 0x30]), + ComponentsConfiguration: Buffer.from([0x01, 0x02, 0x03, 0x00]), + FlashpixVersion: Buffer.from([0x30, 0x31, 0x30, 0x30]), + ColorSpace: 65535, + PixelXDimension: 1, + PixelYDimension: 1 + } + }); + }); + it('should error when missing Exif tag', function () { expect(function () { exif(Buffer.alloc(50));