OSDN Git Service

use uninitialized buffers instead of resizing in QPdfEnginePrivate::addImage()
authorIvailo Monev <xakepa10@gmail.com>
Mon, 28 Feb 2022 14:00:58 +0000 (16:00 +0200)
committerIvailo Monev <xakepa10@gmail.com>
Mon, 28 Feb 2022 14:00:58 +0000 (16:00 +0200)
Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/gui/painting/qpdf.cpp
src/gui/painting/qprintengine_pdf.cpp

index b90cdfc..4eb57e7 100644 (file)
@@ -275,7 +275,7 @@ QByteArray QPdf::generatePath(const QPainterPath &path, const QTransform &matrix
                 s << "h\n";
             s << matrix.map(QPointF(elm.x, elm.y)) << "m\n";
             start = i;
-                break;
+            break;
         case QPainterPath::LineToElement:
             s << matrix.map(QPointF(elm.x, elm.y)) << "l\n";
             break;
index 3e59fb7..b746c59 100644 (file)
@@ -502,8 +502,7 @@ int QPdfEnginePrivate::addImage(const QImage &img, bool *bitmap, qint64 serial_n
 
     if (format == QImage::Format_Mono) {
         int bytesPerLine = (w + 7) >> 3;
-        QByteArray data;
-        data.resize(bytesPerLine * h);
+        QByteArray data(bytesPerLine * h, Qt::Uninitialized);
         char *rawdata = data.data();
         for (int y = 0; y < h; ++y) {
             memcpy(rawdata, image.constScanLine(y), bytesPerLine);
@@ -511,15 +510,13 @@ int QPdfEnginePrivate::addImage(const QImage &img, bool *bitmap, qint64 serial_n
         }
         object = writeImage(data, w, h, d, 0, 0);
     } else {
-        QByteArray softMaskData;
         bool dct = false;
-        QByteArray imageData;
         bool hasAlpha = false;
         bool hasMask = false;
+        QByteArray softMaskData(w * h, Qt::Uninitialized);
+        QByteArray imageData(colorMode == QPrinter::GrayScale ? w * h : 3 * w * h, Qt::Uninitialized);
 
-        imageData.resize(colorMode == QPrinter::GrayScale ? w * h : 3 * w * h);
         uchar *data = (uchar *)imageData.data();
-        softMaskData.resize(w * h);
         uchar *sdata = (uchar *)softMaskData.data();
         for (int y = 0; y < h; ++y) {
             const QRgb *rgb = (const QRgb *)image.constScanLine(y);