diff options
Diffstat (limited to 'src/gui/image/qppmhandler.cpp')
-rw-r--r-- | src/gui/image/qppmhandler.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/gui/image/qppmhandler.cpp b/src/gui/image/qppmhandler.cpp index e53db69e66..df260d56d0 100644 --- a/src/gui/image/qppmhandler.cpp +++ b/src/gui/image/qppmhandler.cpp @@ -13,11 +13,10 @@ #include <qvariant.h> #include <private/qlocale_p.h> #include <private/qtools_p.h> +#include <private/qimage_p.h> QT_BEGIN_NAMESPACE -Q_DECLARE_LOGGING_CATEGORY(lcImageIo) - /***************************************************************************** PBM/PGM/PPM (ASCII and RAW) image read/write functions *****************************************************************************/ @@ -32,7 +31,7 @@ static void discard_pbm_line(QIODevice *d) } 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; int val = -1; @@ -50,6 +49,8 @@ static int read_pbm_int(QIODevice *d, bool *ok) } else { hasOverflow = true; } + if (maxDigits > 0 && --maxDigits == 0) + break; continue; } else { if (c == '#') // comment @@ -65,6 +66,8 @@ static int read_pbm_int(QIODevice *d, bool *ok) discard_pbm_line(d); else break; + if (maxDigits > 0 && --maxDigits == 0) + break; } if (val < 0) *ok = false; @@ -213,7 +216,7 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q b = 0; for (int i=0; i<8; i++) { if (i < bitsLeft) - b = (b << 1) | (read_pbm_int(device, &ok) & 1); + b = (b << 1) | (read_pbm_int(device, &ok, 1) & 1); else b = (b << 1) | (0 & 1); // pad it our self if we need to } @@ -265,13 +268,12 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q return true; } -static bool write_pbm_image(QIODevice *out, const QImage &sourceImage, const QByteArray &sourceFormat) +static bool write_pbm_image(QIODevice *out, const QImage &sourceImage, QByteArrayView sourceFormat) { QByteArray str; QImage image = sourceImage; - QByteArray format = sourceFormat; + const QByteArrayView format = sourceFormat.left(3); // ignore RAW part - format = format.left(3); // ignore RAW part bool gray = format == "pgm"; if (format == "pbm") { @@ -341,7 +343,7 @@ static bool write_pbm_image(QIODevice *out, const QImage &sourceImage, const QBy qsizetype bpl = qsizetype(w) * (gray ? 1 : 3); uchar *buf = new uchar[bpl]; if (image.format() == QImage::Format_Indexed8) { - QList<QRgb> color = image.colorTable(); + const QList<QRgb> color = image.colorTable(); for (uint y=0; y<h; y++) { const uchar *b = image.constScanLine(y); uchar *p = buf; |