X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/90523bdb225f9a0e80dc848c38f75f73c94b4117..6e7d2550cecf6c13b6f76e7e43da93744ad773b8:/src/html/chm.cpp diff --git a/src/html/chm.cpp b/src/html/chm.cpp index 288305d606..584f7fb2cc 100644 --- a/src/html/chm.cpp +++ b/src/html/chm.cpp @@ -487,15 +487,29 @@ size_t wxChmInputStream::OnSysRead(void *buffer, size_t bufsize) m_lasterror = wxSTREAM_NO_ERROR; // If the rest to read from the stream is less - // than the buffer size, than only read the rest + // than the buffer size, then only read the rest if ( m_pos + bufsize > m_size ) bufsize = m_size - m_pos; - m_contentStream->SeekI(m_pos); - m_contentStream->Read(buffer, bufsize); - m_pos +=bufsize; - m_contentStream->SeekI(m_pos); - return bufsize; + if (m_contentStream->SeekI(m_pos) == wxInvalidOffset) + { + m_lasterror = wxSTREAM_EOF; + return 0; + } + + size_t read = m_contentStream->Read(buffer, bufsize).LastRead(); + m_pos += read; + + if (m_contentStream->SeekI(m_pos) == wxInvalidOffset) + { + m_lasterror = wxSTREAM_READ_ERROR; + return 0; + } + + if (read != bufsize) + m_lasterror = m_contentStream->GetLastError(); + + return read; } @@ -717,6 +731,9 @@ bool wxChmInputStream::CreateFileStream(const wxString& pattern) { // Open a filestream to extracted file fin = new wxFileInputStream(tmpfile); + if (!fin->IsOk()) + return false; + m_size = fin->GetSize(); m_content = (char *) malloc(m_size+1); fin->Read(m_content, m_size);