diff --git a/iso/iso.cpp b/iso/iso.cpp --- a/iso/iso.cpp +++ b/iso/iso.cpp @@ -357,7 +357,13 @@ totalSize(size); if (!size) mimeType("application/x-zerosize"); - if (size && !m_isoFile->device()->isOpen()) m_isoFile->device()->open(QIODevice::ReadOnly); + if (size && !m_isoFile->device()->isOpen()) { + m_isoFile->device()->open(QIODevice::ReadOnly); + + // seek(0) ensures integrity with the QIODevice's built-in buffer + // see bug #372023 for details + m_isoFile->device()->seek(0); + } if (zlib) { fileData = isoFileEntry->dataAt(0, sizeof(compressed_file_header)); diff --git a/iso/kiso.cpp b/iso/kiso.cpp --- a/iso/kiso.cpp +++ b/iso/kiso.cpp @@ -212,6 +212,10 @@ QIODevice* dev = (static_cast(udata))->device(); + // seek(0) ensures integrity with the QIODevice's built-in buffer + // see bug #372023 for details + dev->seek(0); + if (dev->seek((qint64)start << (qint64)11)) { if ((dev->read(buf, len << 11u)) != -1) return (len); }