summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source/fitz/image.c11
1 files changed, 3 insertions, 8 deletions
diff --git a/source/fitz/image.c b/source/fitz/image.c
index e2ac2de3..bfafdcd4 100644
--- a/source/fitz/image.c
+++ b/source/fitz/image.c
@@ -279,20 +279,15 @@ fz_image_get_pixmap(fz_context *ctx, fz_image *image, int w, int h)
tile = fz_load_jxr(ctx, image->buffer->buffer->data, image->buffer->buffer->len);
break;
case FZ_IMAGE_JPEG:
- /* Scan JPEG stream and patch missing width/height values in header */
+ /* Scan JPEG stream and patch missing height values in header */
{
unsigned char *d = image->buffer->buffer->data;
unsigned char *e = d + image->buffer->buffer->len;
for (d += 2; d + 9 < e && d[0] == 0xFF; d += (d[2] << 8 | d[3]) + 2)
{
- if (d[1] < 0xC0 || 0xC3 < d[1])
+ if (d[1] < 0xC0 || (0xC3 < d[1] && d[1] < 0xC9) || 0xCB < d[1])
continue;
- if (d[7] == 0xFF && d[8] == 0xFF)
- {
- d[7] = (image->w >> 8) & 0xFF;
- d[8] = image->w & 0xFF;
- }
- if (d[5] == 0xFF && d[6] == 0xFF)
+ if ((d[5] == 0 && d[6] == 0) || ((d[5] << 8) | d[6]) > image->h)
{
d[5] = (image->h >> 8) & 0xFF;
d[6] = image->h & 0xFF;