OSDN Git Service

drop workaround for malformed PNGs
authorIvailo Monev <xakepa10@gmail.com>
Sun, 16 Aug 2020 01:11:21 +0000 (04:11 +0300)
committerIvailo Monev <xakepa10@gmail.com>
Sun, 16 Aug 2020 01:11:21 +0000 (04:11 +0300)
while at it, read the data in single pass as is done in the TIFF image
format handler for an example

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
src/gui/image/qpnghandler.cpp

index 02e3802..029c2d0 100644 (file)
@@ -123,21 +123,9 @@ static void iod_read_fn(png_structp png_ptr, png_bytep data, png_size_t length)
     QPngHandlerPrivate *d = (QPngHandlerPrivate *)png_get_io_ptr(png_ptr);
     QIODevice *in = d->q->device();
 
-    if (d->state == QPngHandlerPrivate::ReadingEnd && !in->isSequential() && (in->size() - in->pos()) < 4 && length == 4) {
-        // Workaround for certain malformed PNGs that lack the final crc bytes
-        uchar endcrc[4] = { 0xae, 0x42, 0x60, 0x82 };
-        memcpy(data, endcrc, 4);
-        in->seek(in->size());
-        return;
-    }
-
-    while (length) {
-        int nr = in->read((char*)data, length);
-        if (nr <= 0) {
-            png_error(png_ptr, "Read Error");
-            break;
-        }
-        length -= nr;
+    int nr = in->read((char*)data, length);
+    if (nr != length) {
+        png_error(png_ptr, "Read Error");
     }
 }