diff options
author | Jacek Naglak <jnaglak@tlen.pl> | 2013-09-24 22:14:47 +0200 |
---|---|---|
committer | Jacek Naglak <jnaglak@tlen.pl> | 2013-09-24 22:14:47 +0200 |
commit | 5dea695c719dc2ee61e7677d553f16c1c4c3ac52 (patch) | |
tree | 7331c4db114ff1e3d1de05a48c3e18a8d24d7e63 | |
parent | 745eacbcf5404cd0b597ac4d986e819c3e03e786 (diff) |
Fixed image orientation if a JFIF APP0 segment is present in a JPEG header.
-rw-r--r-- | exif.c | 16 | ||||
-rw-r--r-- | exif.h | 1 |
2 files changed, 12 insertions, 5 deletions
@@ -73,16 +73,22 @@ int exif_orientation(const fileinfo_t *file) if (fd < 0) return -1; - if (s_read(fd, file->name, data, 4) < 0) + if (s_read(fd, file->name, data, 2) < 0) goto abort; if (btous(data, order) != JPEG_MARKER_SOI) goto abort; - if (btous(data + 2, order) != JPEG_MARKER_APP1) + if (s_read(fd, file->name, data, 4) < 0) goto abort; - - if (s_read(fd, file->name, data, 2) < 0) + if (btous(data, order) == JPEG_MARKER_APP0){ + len = btous(data + 2, order); + if (s_read(fd, file->name, data, len - 2) < 0) + goto abort; + if (s_read(fd, file->name, data, 4) < 0) + goto abort; + } + if (btous(data, order) != JPEG_MARKER_APP1) goto abort; - len = btous(data, order); + len = btous(data + 2, order); if (len < 8) goto abort; @@ -23,6 +23,7 @@ enum { JPEG_MARKER_SOI = 0xFFD8, + JPEG_MARKER_APP0 = 0xFFE0, JPEG_MARKER_APP1 = 0xFFE1 }; |