From c690c6fb1c6aac03cc1f1dfb1f76a387732026c6 Mon Sep 17 00:00:00 2001 From: Albrecht Schlosser Date: Mon, 23 May 2011 21:05:22 +0000 Subject: Fix STR #2637, part 2: accessing pixel values beyond array bounds. 64-bit converters to X image formats would access one more pixel per line for images with odd widths. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8731 ea41ed52-d2ee-0310-a9c1-e6b18d33e121 --- src/fl_draw_image.cxx | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/fl_draw_image.cxx b/src/fl_draw_image.cxx index 857d03893..0d0570e26 100644 --- a/src/fl_draw_image.cxx +++ b/src/fl_draw_image.cxx @@ -297,13 +297,15 @@ static void rrr_converter(const uchar *from, uchar *to, int w, int delta) { # if WORDS_BIGENDIAN # define INNARDS32(f) \ U64 *t = (U64*)to; \ - int w1 = (w+1)/2; \ - for (; w1--; from += delta) {U64 i = f; from += delta; *t++ = (i<<32)|(f);} + int w1 = w/2; \ + for (; w1--; from += delta) {U64 i = f; from += delta; *t++ = (i<<32)|(f);} \ + if (w&1) *t++ = (U64)(f)<<32; # else # define INNARDS32(f) \ U64 *t = (U64*)to; \ - int w1 = (w+1)/2; \ - for (; w1--; from += delta) {U64 i=f; from+= delta; *t++ = ((U64)(f)<<32)|i;} + int w1 = w/2; \ + for (; w1--; from += delta) {U64 i = f; from += delta; *t++ = ((U64)(f)<<32)|i;} \ + if (w&1) *t++ = (U64)(f); # endif # else # define STORETYPE U32 -- cgit v1.2.3