]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/stringops.cpp
restored accidentally commented-out code
[wxWidgets.git] / src / common / stringops.cpp
index ac0455da53cd8b75d8f6333f044be29f9ea7972d..66a461a6bb20f507b3cd058d7039705478953d75 100644 (file)
@@ -87,17 +87,26 @@ unsigned char wxStringOperationsUtf8::ms_utf8IterTable[256] = {
 // U+100000..U+10FFFF |  F4      |  80..8F  |  80..BF  |  80..BF  |
 // -------------------+----------+----------+----------+----------+
 
-bool wxStringOperationsUtf8::IsValidUtf8String(const char *str)
+bool wxStringOperationsUtf8::IsValidUtf8String(const char *str, size_t len)
 {
     if ( !str )
         return true; // empty string is UTF8 string
 
     const unsigned char *c = (const unsigned char*)str;
+    const unsigned char * const end = (len == wxStringImpl::npos) ? NULL : c + len;
 
-    for ( ; *c; ++c )
+    for ( ; c != end && *c; ++c )
     {
         unsigned char b = *c;
 
+        if ( end != NULL )
+        {
+            // if the string is not NULL-terminated, verify we have enough
+            // bytes in it left for current character's encoding:
+            if ( c + ms_utf8IterTable[*c] > end )
+                return false;
+        }
+
         if ( b <= 0x7F ) // 00..7F
             continue;