QPpmHandler: fix reading ppm files
The ppm spec allows 1-bit ascii ppm files to have no spaces bitween the single bits. Therefore we have to adjust read_pbm_int() to stop after reading one digit. Fixes: QTBUG-119239 Change-Id: I161038076c5dee4662aa66a1215822fc75e6a19e Reviewed-by: Eirik Aavitsland <eirik.aavitsland@qt.io> (cherry picked from commit 975b3d5d530b647ba665459bef2fb3ee6ab5ccc1) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
901515fe03
commit
037aa20b37
@ -32,7 +32,7 @@ static void discard_pbm_line(QIODevice *d)
|
|||||||
} while (res > 0 && buf[res-1] != '\n');
|
} while (res > 0 && buf[res-1] != '\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
static int read_pbm_int(QIODevice *d, bool *ok)
|
static int read_pbm_int(QIODevice *d, bool *ok, int maxDigits = -1)
|
||||||
{
|
{
|
||||||
char c;
|
char c;
|
||||||
int val = -1;
|
int val = -1;
|
||||||
@ -50,6 +50,8 @@ static int read_pbm_int(QIODevice *d, bool *ok)
|
|||||||
} else {
|
} else {
|
||||||
hasOverflow = true;
|
hasOverflow = true;
|
||||||
}
|
}
|
||||||
|
if (maxDigits > 0 && --maxDigits == 0)
|
||||||
|
break;
|
||||||
continue;
|
continue;
|
||||||
} else {
|
} else {
|
||||||
if (c == '#') // comment
|
if (c == '#') // comment
|
||||||
@ -65,6 +67,8 @@ static int read_pbm_int(QIODevice *d, bool *ok)
|
|||||||
discard_pbm_line(d);
|
discard_pbm_line(d);
|
||||||
else
|
else
|
||||||
break;
|
break;
|
||||||
|
if (maxDigits > 0 && --maxDigits == 0)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (val < 0)
|
if (val < 0)
|
||||||
*ok = false;
|
*ok = false;
|
||||||
@ -213,7 +217,7 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q
|
|||||||
b = 0;
|
b = 0;
|
||||||
for (int i=0; i<8; i++) {
|
for (int i=0; i<8; i++) {
|
||||||
if (i < bitsLeft)
|
if (i < bitsLeft)
|
||||||
b = (b << 1) | (read_pbm_int(device, &ok) & 1);
|
b = (b << 1) | (read_pbm_int(device, &ok, 1) & 1);
|
||||||
else
|
else
|
||||||
b = (b << 1) | (0 & 1); // pad it our self if we need to
|
b = (b << 1) | (0 & 1); // pad it our self if we need to
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user