]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/txtstrm.cpp
fix memory leak in wxScreenDC, fixes #13249
[wxWidgets.git] / src / common / txtstrm.cpp
index 830bc985ba2f83b869e463466d57498cfaeb31df..94083459604484ffd4c4ce691548884a31ce56a6 100644 (file)
@@ -75,11 +75,35 @@ wxChar wxTextInputStream::NextChar()
         if(m_input.LastRead() <= 0)
             return wxEOT;
 
-        if ( m_conv->ToWChar(wbuf, WXSIZEOF(wbuf), m_lastBytes, inlen + 1)
-                != wxCONV_FAILED )
-            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();