Fix final valgrind errors with #830. Catch mb conversion error that may not
authorJeremy Allison <jra@samba.org>
Wed, 4 Feb 2004 20:28:51 +0000 (20:28 +0000)
committerJeremy Allison <jra@samba.org>
Wed, 4 Feb 2004 20:28:51 +0000 (20:28 +0000)
terminate correctly.
Jeremy.

source/lib/util_str.c

index 822ab2062869f84dc0d6479e2c5c47ad1db58e7e..2d1f596c97922e49da0fb8a89d52ae60532ac502 100644 (file)
@@ -1293,6 +1293,8 @@ char *strnrchr_m(const char *s, char c, unsigned int n)
 
 void strlower_m(char *s)
 {
+       size_t len;
+
        /* this is quite a common operation, so we want it to be
           fast. We optimise for the ascii case, knowing that all our
           supported multi-byte character sets are ascii-compatible
@@ -1308,7 +1310,12 @@ void strlower_m(char *s)
 
        /* I assume that lowercased string takes the same number of bytes
         * as source string even in UTF-8 encoding. (VIV) */
-       unix_strlower(s,strlen(s)+1,s,strlen(s)+1);     
+       len = strlen(s) + 1;
+       errno = 0;
+       unix_strlower(s,len,s,len);     
+       /* Catch mb conversion errors that may not terminate. */
+       if (errno)
+               s[len-1] = '\0';
 }
 
 /**
@@ -1317,6 +1324,8 @@ void strlower_m(char *s)
 
 void strupper_m(char *s)
 {
+       size_t len;
+
        /* this is quite a common operation, so we want it to be
           fast. We optimise for the ascii case, knowing that all our
           supported multi-byte character sets are ascii-compatible
@@ -1332,7 +1341,12 @@ void strupper_m(char *s)
 
        /* I assume that lowercased string takes the same number of bytes
         * as source string even in multibyte encoding. (VIV) */
-       unix_strupper(s,strlen(s)+1,s,strlen(s)+1);     
+       len = strlen(s) + 1;
+       errno = 0;
+       unix_strupper(s,len,s,len);     
+       /* Catch mb conversion errors that may not terminate. */
+       if (errno)
+               s[len-1] = '\0';
 }
 
 /**