]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/txtstrm.cpp
Fix history in wxWebViewIE when using a custom file scheme.
[wxWidgets.git] / src / common / txtstrm.cpp
index 9f9669faa184ec5e3b0ee34b33cec0bd67241ae5..94083459604484ffd4c4ce691548884a31ce56a6 100644 (file)
@@ -75,11 +75,35 @@ wxChar wxTextInputStream::NextChar()
         if(m_input.LastRead() <= 0)
             return wxEOT;
 
         if(m_input.LastRead() <= 0)
             return wxEOT;
 
-        if ( m_conv->ToWChar(wbuf, WXSIZEOF(wbuf), m_lastBytes, inlen + 1)
-                == 1 )
-            return wbuf[0];
+        switch ( m_conv->ToWChar(wbuf, WXSIZEOF(wbuf), m_lastBytes, inlen + 1) )
+        {
+            case 0:
+                // this is a bug in converter object as it should either fail
+                // or decode non-empty string to something non-empty
+                wxFAIL_MSG("ToWChar() can't return 0 for non-empty input");
+                break;
+
+            case wxCONV_FAILED:
+                // the buffer probably doesn't contain enough bytes to decode
+                // as a complete character, try with more bytes
+                break;
+
+            default:
+                // if we couldn't decode a single character during the last
+                // loop iteration we shouldn't be able to decode 2 or more of
+                // them with an extra single byte, something fishy is going on
+                wxFAIL_MSG("unexpected decoding result");
+                // fall through nevertheless and return at least something
+
+            case 1:
+                // we finally decoded a character
+                return wbuf[0];
+        }
     }
     }
-    // there should be no encoding which requires more than nine bytes for one character...
+
+    // there should be no encoding which requires more than nine bytes for one
+    // character so something must be wrong with our conversion but we have no
+    // way to signal it from here
     return wxEOT;
 #else
     m_lastBytes[0] = m_input.GetC();
     return wxEOT;
 #else
     m_lastBytes[0] = m_input.GetC();