[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    kdelibs/kimgio
From:       Melchior Franz <mfranz () kde ! org>
Date:       2005-05-02 13:08:18
Message-ID: 20050502130818.853B44A6 () office ! kde ! org
[Download RAW message or body]

CVS commit by mfranz: 

revert the stricter sanity check. It is wrong and totally broke the importer.
start + length *may* be equal to data size: let's say we have 8 bytes
data, and want to address a one byte long data block on the last position.
This makes a start offset of 7 plus a data block length of 1 => 8.

CCMAIL: mueller@kde.org


  M +8 -7      rgb.cpp   1.33


--- kdelibs/kimgio/rgb.cpp  #1.32:1.33
@@ -88,5 +88,5 @@ bool SGIImage::getRow(uchar *dest)
         if (!m_rle) {
                 for (i = 0; i < m_xsize; i++) {
-                        if(m_pos >= m_data.end())
+                        if (m_pos >= m_data.end())
                                 return false;
                         dest[i] = uchar(*m_pos);
@@ -131,9 +131,9 @@ bool SGIImage::readData(QImage& img)
 
         for (y = 0; y < m_ysize; y++) {
-                c = (QRgb *) img.scanLine(m_ysize - y - 1);
                 if (m_rle)
                         m_pos = m_data.begin() + *start++;
                 if (!getRow(line))
                         return false;
+                c = (QRgb *)img.scanLine(m_ysize - y - 1);
                 for (x = 0; x < m_xsize; x++, c++)
                         *c = qRgb(line[x], line[x], line[x]);
@@ -145,9 +145,9 @@ bool SGIImage::readData(QImage& img)
         if (m_zsize != 2) {
                 for (y = 0; y < m_ysize; y++) {
-                        c = reinterpret_cast<QRgb *>(img.scanLine(m_ysize - y - 1));
                         if (m_rle)
                                 m_pos = m_data.begin() + *start++;
                         if (!getRow(line))
                                 return false;
+                        c = (QRgb *)img.scanLine(m_ysize - y - 1);
                         for (x = 0; x < m_xsize; x++, c++)
                                 *c = qRgb(qRed(*c), line[x], line[x]);
@@ -155,9 +155,9 @@ bool SGIImage::readData(QImage& img)
 
                 for (y = 0; y < m_ysize; y++) {
-                        c = reinterpret_cast<QRgb *>(img.scanLine(m_ysize - y - 1));
                         if (m_rle)
                                 m_pos = m_data.begin() + *start++;
                         if (!getRow(line))
                                 return false;
+                        c = (QRgb *)img.scanLine(m_ysize - y - 1);
                         for (x = 0; x < m_xsize; x++, c++)
                                 *c = qRgb(qRed(*c), qGreen(*c), line[x]);
@@ -173,5 +173,5 @@ bool SGIImage::readData(QImage& img)
                 if (!getRow(line))
                         return false;
-                c = (QRgb*) img.scanLine(m_ysize - y - 1);
+                c = (QRgb *)img.scanLine(m_ysize - y - 1);
                 for (x = 0; x < m_xsize; x++, c++)
                         *c = qRgba(qRed(*c), qGreen(*c), qBlue(*c), line[x]);
@@ -270,8 +270,9 @@ bool SGIImage::readImage(QImage& img)
         m_data = m_dev->readAll();
 
-        // sanity ckeck
+        // sanity check
         if (m_rle)
                 for (uint o = 0; o < m_numrows; o++)
-                        if (m_starttab[o] + m_lengthtab[o] >= m_data.size()) {
+                        // don't change to greater-or-equal!
+                        if (m_starttab[o] + m_lengthtab[o] > m_data.size()) {
                                 kdDebug(399) << "image corrupt (sanity check failed)" << endl;
                                 return false;


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic