]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/zstream.cpp
don't crash on weird line endings like \r\r\n
[wxWidgets.git] / src / common / zstream.cpp
index 083ac372fbad895ecd1f120cb4e7a8b1607ed1a6..55589614a5c564c28832d8036f6ea05f6bcaa3d1 100644 (file)
@@ -1,5 +1,5 @@
 //////////////////////////////////////////////////////////////////////////////
-// Name:        zstream.cpp
+// Name:        src/common/zstream.cpp
 // Purpose:     Compressed stream classes
 // Author:      Guilhem Lavaux
 // Modified by: Mike Wetherell
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-  #pragma hdrstop
+    #pragma hdrstop
 #endif
 
 #if wxUSE_ZLIB && wxUSE_STREAMS
 
 #include "wx/zstream.h"
-#include "wx/utils.h"
-#include "wx/intl.h"
-#include "wx/log.h"
+
+#ifndef WX_PRECOMP
+    #include "wx/intl.h"
+    #include "wx/log.h"
+    #include "wx/utils.h"
+#endif
+
 
 // normally, the compiler options should contain -I../zlib, but it is
 // apparently not the case for all MSW makefiles and so, unless we use
 // configure (which defines __WX_SETUP_H__) or it is explicitly overridden by
 // the user (who can define wxUSE_ZLIB_H_IN_PATH), we hardcode the path here
 #if defined(__WXMSW__) && !defined(__WX_SETUP_H__) && !defined(wxUSE_ZLIB_H_IN_PATH)
-   #include "../zlib/zlib.h"
+    #include "../zlib/zlib.h"
 #else
-   #include "zlib.h"
+    #include "zlib.h"
 #endif
 
 enum {
@@ -136,6 +140,7 @@ size_t wxZlibInputStream::OnSysRead(void *buffer, size_t size)
         // any additional data can be read from the underlying stream (the crc
         // in a gzip for example)
         if (m_inflate->avail_in) {
+          m_parent_i_stream->Reset();
           m_parent_i_stream->Ungetch(m_inflate->next_in, m_inflate->avail_in);
           m_inflate->avail_in = 0;
         }
@@ -282,7 +287,11 @@ size_t wxZlibOutputStream::OnSysWrite(const void *buffer, size_t size)
   wxASSERT_MSG(m_deflate && m_z_buffer, wxT("Deflate stream not open"));
 
   if (!m_deflate || !m_z_buffer)
+  {
+    // notice that this will make IsOk() test just below return false
     m_lasterror = wxSTREAM_WRITE_ERROR;
+  }
+
   if (!IsOk() || !size)
     return 0;
 
@@ -326,4 +335,3 @@ size_t wxZlibOutputStream::OnSysWrite(const void *buffer, size_t size)
 
 #endif
   // wxUSE_ZLIB && wxUSE_STREAMS
-