Skip to content

Commit ecab380

Browse files
committed
FIX: ATRONIX: Fix a size limit error in decoding top-down BMPs
Top-down BMPs have a negative height: http://www.fileformat.info/format/bmp/egff.htm This fixes Atronix internal bug 210 (cherry picked from commit 896113c)
1 parent b1bc3c0 commit ecab380

File tree

1 file changed

+10
-2
lines changed

1 file changed

+10
-2
lines changed

src/core/u-bmp.c

+10-2
Original file line numberDiff line numberDiff line change
@@ -299,6 +299,7 @@ void Unmap_Bytes(void *srcp, REBYTE **dstp, char *map) {
299299
REBCNT *dp;
300300
RGBQUADPTR color;
301301
RGBQUADPTR ctab = 0;
302+
REBOOL bottom_up = 1;
302303

303304
cp = codi->data;
304305
Map_Bytes(&bmfh, &cp, mapBITMAPFILEHEADER);
@@ -355,12 +356,18 @@ void Unmap_Bytes(void *srcp, REBYTE **dstp, char *map) {
355356
if (bmfh.bfOffBits != (DWORD)(cp - codi->data))
356357
cp = codi->data + bmfh.bfOffBits;
357358

359+
if (h < 0) {
360+
bottom_up = 0;
361+
h = -h;
362+
}
363+
358364
codi->w = w;
359365
codi->h = h;
360366
codi->bits = Make_Mem(w * h * 4);
361367

362368
dp = (REBCNT *) codi->bits;
363-
dp += w * h - w;
369+
if (bottom_up)
370+
dp += w * h - w;
364371

365372
for (y = 0; y<h; y++) {
366373
switch(compression) {
@@ -506,7 +513,8 @@ void Unmap_Bytes(void *srcp, REBYTE **dstp, char *map) {
506513
codi->error = CODI_ERR_ENCODING;
507514
goto error;
508515
}
509-
dp -= 2 * w;
516+
if (bottom_up)
517+
dp -= 2 * w;
510518
}
511519
error:
512520
if (ctab) free(ctab);

0 commit comments

Comments
 (0)