Lines 319-324
Link Here
|
319 |
{ |
319 |
{ |
320 |
unsigned long datasize; |
320 |
unsigned long datasize; |
321 |
unsigned char *bufptr; |
321 |
unsigned char *bufptr; |
|
|
322 |
unsigned char *bufend; |
322 |
DATA32 *dataptr; |
323 |
DATA32 *dataptr; |
323 |
|
324 |
|
324 |
int y, pl = 0; |
325 |
int y, pl = 0; |
Lines 348-353
Link Here
|
348 |
/* bufptr is the next byte to be read from the buffer */ |
349 |
/* bufptr is the next byte to be read from the buffer */ |
349 |
bufptr = filedata; |
350 |
bufptr = filedata; |
350 |
|
351 |
|
|
|
352 |
/* bufend is one past the last byte to be read from the buffer */ |
353 |
bufend = filedata + datasize; |
354 |
|
351 |
/* dataptr is the next 32-bit pixel to be filled in */ |
355 |
/* dataptr is the next 32-bit pixel to be filled in */ |
352 |
dataptr = im->data; |
356 |
dataptr = im->data; |
353 |
|
357 |
|
Lines 365-371
Link Here
|
365 |
else |
369 |
else |
366 |
dataptr = im->data + (y * im->w); |
370 |
dataptr = im->data + (y * im->w); |
367 |
|
371 |
|
368 |
for (x = 0; x < im->w; x++) /* for each pixel in the row */ |
372 |
for (x = 0; |
|
|
373 |
x < im->w && bufptr+bpp/8 < bufend; |
374 |
x++) /* for each pixel in the row */ |
369 |
{ |
375 |
{ |
370 |
switch (bpp) |
376 |
switch (bpp) |
371 |
{ |
377 |
{ |
Lines 422-429
Link Here
|
422 |
unsigned char curbyte, red, green, blue, alpha; |
428 |
unsigned char curbyte, red, green, blue, alpha; |
423 |
DATA32 *final_pixel = dataptr + im->w * im->h; |
429 |
DATA32 *final_pixel = dataptr + im->w * im->h; |
424 |
|
430 |
|
425 |
/* loop until we've got all the pixels */ |
431 |
/* loop until we've got all the pixels or run out of input */ |
426 |
while (dataptr < final_pixel) |
432 |
while (dataptr < final_pixel && bufptr+1+bpp/8 < bufend) |
427 |
{ |
433 |
{ |
428 |
int count; |
434 |
int count; |
429 |
|
435 |
|
Lines 441-447
Link Here
|
441 |
green = *bufptr++; |
447 |
green = *bufptr++; |
442 |
red = *bufptr++; |
448 |
red = *bufptr++; |
443 |
alpha = *bufptr++; |
449 |
alpha = *bufptr++; |
444 |
for (i = 0; i < count; i++) |
450 |
for (i = 0; i < count && dataptr < final_pixel; i++) |
445 |
{ |
451 |
{ |
446 |
WRITE_RGBA(dataptr, red, green, blue, alpha); |
452 |
WRITE_RGBA(dataptr, red, green, blue, alpha); |
447 |
dataptr++; |
453 |
dataptr++; |
Lines 452-458
Link Here
|
452 |
blue = *bufptr++; |
458 |
blue = *bufptr++; |
453 |
green = *bufptr++; |
459 |
green = *bufptr++; |
454 |
red = *bufptr++; |
460 |
red = *bufptr++; |
455 |
for (i = 0; i < count; i++) |
461 |
for (i = 0; i < count && dataptr < final_pixel; i++) |
456 |
{ |
462 |
{ |
457 |
WRITE_RGBA(dataptr, red, green, blue, |
463 |
WRITE_RGBA(dataptr, red, green, blue, |
458 |
(char)0xff); |
464 |
(char)0xff); |
Lines 462-468
Link Here
|
462 |
|
468 |
|
463 |
case 8: |
469 |
case 8: |
464 |
alpha = *bufptr++; |
470 |
alpha = *bufptr++; |
465 |
for (i = 0; i < count; i++) |
471 |
for (i = 0; i < count && dataptr < final_pixel; i++) |
466 |
{ |
472 |
{ |
467 |
WRITE_RGBA(dataptr, alpha, alpha, alpha, |
473 |
WRITE_RGBA(dataptr, alpha, alpha, alpha, |
468 |
(char)0xff); |
474 |
(char)0xff); |
Lines 477-483
Link Here
|
477 |
{ |
483 |
{ |
478 |
int i; |
484 |
int i; |
479 |
|
485 |
|
480 |
for (i = 0; i < count; i++) |
486 |
for (i = 0; i < count && dataptr < final_pixel; i++) |
481 |
{ |
487 |
{ |
482 |
switch (bpp) |
488 |
switch (bpp) |
483 |
{ |
489 |
{ |