diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index d5b23722f74..9f9cb0ab0bd 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -1578,6 +1578,9 @@ uchar *QResourceFileEnginePrivate::map(qint64 offset, qint64 size, QFile::Memory { Q_Q(QResourceFileEngine); Q_UNUSED(flags); + Q_ASSERT_X(resource.compressionAlgorithm() == QResource::NoCompression + || !uncompressed.isNull(), "QFile::map()", + "open() should have uncompressed compressed resources"); qint64 max = resource.uncompressedSize(); qint64 end; @@ -1587,14 +1590,12 @@ uchar *QResourceFileEnginePrivate::map(qint64 offset, qint64 size, QFile::Memory return nullptr; } - const uchar *address = resource.data(); - if (resource.compressionAlgorithm() != QResource::NoCompression) { - uncompress(); - if (uncompressed.isNull()) - return nullptr; - address = reinterpret_cast(uncompressed.constData()); - } + const uchar *address = reinterpret_cast(uncompressed.constBegin()); + if (!uncompressed.isNull()) + return const_cast(address) + offset; + // resource was not compressed + address = resource.data(); return const_cast(address) + offset; }