diff options
author | Jeremy Allison <jra@samba.org> | 2004-02-04 20:28:48 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2004-02-04 20:28:48 +0000 |
commit | 69b086fdaffe2f10235f85f369453bdf0ab470ed (patch) | |
tree | 4f1556e3f0bc6fd6acbd0b5d98fc5c41b2c12972 | |
parent | d575286894afc1db2ba54324229e44d6c116d878 (diff) | |
download | samba-69b086fdaffe2f10235f85f369453bdf0ab470ed.tar.gz samba-69b086fdaffe2f10235f85f369453bdf0ab470ed.tar.bz2 samba-69b086fdaffe2f10235f85f369453bdf0ab470ed.zip |
Fix final valgrind errors with #830. Catch mb conversion error that may not
terminate correctly.
Jeremy.
(This used to be commit a1f7cea9f278ef15206bf48663328c28d295bd6d)
-rw-r--r-- | source3/lib/util_str.c | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/source3/lib/util_str.c b/source3/lib/util_str.c index 822ab20628..2d1f596c97 100644 --- a/source3/lib/util_str.c +++ b/source3/lib/util_str.c @@ -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'; } /** |