X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8faef7ccbc4b4e192da06de7e1a2a7f1dff7ec91..a43a9e5521440dbb28037646ed4a07125c8823a9:/src/common/imagbmp.cpp diff --git a/src/common/imagbmp.cpp b/src/common/imagbmp.cpp index 9693a0d85e..388a0c8224 100644 --- a/src/common/imagbmp.cpp +++ b/src/common/imagbmp.cpp @@ -1280,11 +1280,11 @@ bool wxICOHandler::DoLoadFile(wxImage *image, wxInputStream& stream, int iSel = wxNOT_FOUND; // remember how many bytes we read from the stream: - wxFileOffset offset = sizeof(IconDir); + wxFileOffset alreadySeeked = sizeof(IconDir); for (unsigned int i = 0; i < nIcons; i++ ) { - offset += stream.Read(pCurrentEntry, sizeof(ICONDIRENTRY)).LastRead(); + alreadySeeked += stream.Read(pCurrentEntry, sizeof(ICONDIRENTRY)).LastRead(); // bHeight and bColorCount are wxUint8 if ( pCurrentEntry->bWidth >= wMax ) @@ -1322,8 +1322,8 @@ bool wxICOHandler::DoLoadFile(wxImage *image, wxInputStream& stream, // NOTE: seeking a positive amount in wxFromCurrent mode allows us to // load even non-seekable streams (see wxInputStream::SeekI docs)! - if (stream.SeekI(wxUINT32_SWAP_ON_BE(pCurrentEntry->dwImageOffset) - offset, - wxFromCurrent) == wxInvalidOffset) + wxFileOffset offset = wxUINT32_SWAP_ON_BE(pCurrentEntry->dwImageOffset) - alreadySeeked; + if (offset != 0 && stream.SeekI(offset, wxFromCurrent) == wxInvalidOffset) return false; bResult = LoadDib(image, stream, true, IsBmp);