Make the ppm image handler corrctly handle long comment lines
The ppm decoder used a fixed size buffer to discard comment lines, which would fail for comments longer than 100 characters. Task-number: QTBUG-49414 Change-Id: I92e910e025cf7584a6ff1c0e5b0e8a4ab281d479 Reviewed-by: Liang Qi <liang.qi@theqtcompany.com>bb10
parent
912df566d0
commit
711f799298
|
|
@ -46,13 +46,21 @@ QT_BEGIN_NAMESPACE
|
|||
PBM/PGM/PPM (ASCII and RAW) image read/write functions
|
||||
*****************************************************************************/
|
||||
|
||||
static void discard_pbm_line(QIODevice *d)
|
||||
{
|
||||
const int buflen = 100;
|
||||
char buf[buflen];
|
||||
int res = 0;
|
||||
do {
|
||||
res = d->readLine(buf, buflen);
|
||||
} while (res > 0 && buf[res-1] != '\n');
|
||||
}
|
||||
|
||||
static int read_pbm_int(QIODevice *d)
|
||||
{
|
||||
char c;
|
||||
int val = -1;
|
||||
bool digit;
|
||||
const int buflen = 100;
|
||||
char buf[buflen];
|
||||
for (;;) {
|
||||
if (!d->getChar(&c)) // end of file
|
||||
break;
|
||||
|
|
@ -63,7 +71,7 @@ static int read_pbm_int(QIODevice *d)
|
|||
continue;
|
||||
} else {
|
||||
if (c == '#') // comment
|
||||
d->readLine(buf, buflen);
|
||||
discard_pbm_line(d);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -72,7 +80,7 @@ static int read_pbm_int(QIODevice *d)
|
|||
else if (isspace((uchar) c))
|
||||
continue;
|
||||
else if (c == '#')
|
||||
(void)d->readLine(buf, buflen);
|
||||
discard_pbm_line(d);
|
||||
else
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,12 @@
|
|||
P2
|
||||
# A short comment
|
||||
# A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment A very long comment
|
||||
24 7
|
||||
15
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
0 3 3 3 3 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 15 15 15 0
|
||||
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0
|
||||
0 3 3 3 0 0 0 7 7 7 0 0 0 11 11 11 0 0 0 15 15 15 15 0
|
||||
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 0 0
|
||||
0 3 0 0 0 0 0 7 7 7 7 0 0 11 11 11 11 0 0 15 0 0 0 0
|
||||
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
|
|
@ -224,6 +224,7 @@ void tst_QImageReader::readImage_data()
|
|||
QTest::newRow("PPM: runners") << QString("runners.ppm") << true << QByteArray("ppm");
|
||||
QTest::newRow("PPM: test") << QString("test.ppm") << true << QByteArray("ppm");
|
||||
QTest::newRow("XBM: gnus") << QString("gnus.xbm") << true << QByteArray("xbm");
|
||||
QTest::newRow("PGM: longcomment") << QString("longcomment.pgm") << true << QByteArray("pgm");
|
||||
|
||||
QTest::newRow("JPEG: beavis") << QString("beavis.jpg") << true << QByteArray("jpeg");
|
||||
QTest::newRow("JPEG: qtbug13653") << QString("qtbug13653-no_eoi.jpg") << true << QByteArray("jpeg");
|
||||
|
|
|
|||
Loading…
Reference in New Issue