diff -uNrp samba-3.0.23d.org/source/lib/util_str.c samba-3.0.23d/source/lib/util_str.c
--- samba-3.0.23d.org/source/lib/util_str.c	2006-08-31 03:08:38.000000000 +0900
+++ samba-3.0.23d/source/lib/util_str.c	2007-01-23 16:12:20.000000000 +0900
@@ -1519,10 +1519,10 @@ void strlower_m(char *s)
 	len = strlen(s) + 1;
 	errno_save = errno;
 	errno = 0;
-	unix_strlower(s,len,s,len);	
+	len = unix_strlower(s,strlen(s)+1,s,maxlen);
 	/* Catch mb conversion errors that may not terminate. */
 	if (errno)
-		s[len-1] = '\0';
+		s[(len>0)?len-1:0] = '\0';
 	errno = errno_save;
 }
 
@@ -1553,10 +1553,10 @@ void strupper_m(char *s)
 	len = strlen(s) + 1;
 	errno_save = errno;
 	errno = 0;
-	unix_strupper(s,len,s,len);	
+	len = unix_strupper(s,strlen(s)+1,s,maxlen);
 	/* Catch mb conversion errors that may not terminate. */
 	if (errno)
-		s[len-1] = '\0';
+		s[(len>0)?len-1:0] = '\0';
 	errno = errno_save;
 }
 
