]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/strconv.cpp
wxToggleButton on wxMac has these methods now
[wxWidgets.git] / src / common / strconv.cpp
index 8597373f546cdbb983cb211cba50d0d34052fe81..9612c11ca9790012d75decc452d3ffb28472c2a9 100644 (file)
@@ -177,9 +177,11 @@ const wxWCharBuffer wxMBConv::cMB2WC(const char *psz) const
         {
             // now do the actual conversion
             wxWCharBuffer buf(nLen);
-            MB2WC(buf.data(), psz, nLen + 1); // with the trailing NUL
-
-            return buf;
+            nLen = MB2WC(buf.data(), psz, nLen + 1); // with the trailing NULL
+            if ( nLen != (size_t)-1 )
+            {
+                return buf;
+            }
         }
     }
 
@@ -196,9 +198,11 @@ const wxCharBuffer wxMBConv::cWC2MB(const wchar_t *pwz) const
         if ( nLen != (size_t)-1 )
         {
             wxCharBuffer buf(nLen+3);       // space for a wxUint32 trailing zero
-            WC2MB(buf.data(), pwz, nLen + 4);
-
-            return buf;
+            nLen = WC2MB(buf.data(), pwz, nLen + 4);
+            if ( nLen != (size_t)-1 )
+            {
+                return buf;
+            }
         }
     }
 
@@ -1331,13 +1335,16 @@ public:
                }
            ByteCount byteBufferLen = n * sizeof( UniChar ) ; 
 #if SIZEOF_WCHAR_T == 4
-               ubuf = (UniChar*) malloc( byteBufferLen ) ;
+               ubuf = (UniChar*) malloc( byteBufferLen + 2 ) ;
 #else
                ubuf = (UniChar*) (buf ? buf : tbuf) ;
 #endif
            status = TECConvertText(m_MB2WC_converter, (ConstTextPtr) psz , byteInLen, &byteInLen,
              (TextPtr) ubuf , byteBufferLen, &byteOutLen);
 #if SIZEOF_WCHAR_T == 4
+        // we have to terminate here, because n might be larger for the trailing zero, and if UniChar
+        // is not properly terminated we get random characters at the end
+        ubuf[byteOutLen / sizeof( UniChar ) ] = 0 ;
                wxMBConvUTF16BE converter ;
                res = converter.MB2WC( (buf ? buf : tbuf) , (const char*)ubuf , n ) ;
                free( ubuf ) ;