Fix bug "select lower('asd') = 'asd'" returns false with multibyte encoding
authorTeodor Sigaev <teodor@sigaev.ru>
Thu, 26 Jun 2008 16:06:37 +0000 (16:06 +0000)
committerTeodor Sigaev <teodor@sigaev.ru>
Thu, 26 Jun 2008 16:06:37 +0000 (16:06 +0000)
and non-C locale. Fix is just to use correct source's length for char2wchar
call.

src/backend/utils/adt/formatting.c

index a823a5b9abd3a33b449ac875a333c9f978326f27..dfe9d8efbf7e770aeee0018198aa7602d19bf735 100644 (file)
@@ -1454,7 +1454,7 @@ str_tolower(char *buff, size_t nbytes)
                /* Output workspace cannot have more codes than input bytes */
                workspace = (wchar_t *) palloc((nbytes + 1) * sizeof(wchar_t));
 
-               char2wchar(workspace, nbytes + 1, buff, nbytes + 1);
+               char2wchar(workspace, nbytes + 1, buff, nbytes);
 
                for (curr_char = 0; workspace[curr_char] != 0; curr_char++)
                        workspace[curr_char] = towlower(workspace[curr_char]);
@@ -1502,7 +1502,7 @@ str_toupper(char *buff, size_t nbytes)
                /* Output workspace cannot have more codes than input bytes */
                workspace = (wchar_t *) palloc((nbytes + 1) * sizeof(wchar_t));
 
-               char2wchar(workspace, nbytes + 1, buff, nbytes + 1);
+               char2wchar(workspace, nbytes + 1, buff, nbytes);
 
                for (curr_char = 0; workspace[curr_char] != 0; curr_char++)
                        workspace[curr_char] = towupper(workspace[curr_char]);
@@ -1551,7 +1551,7 @@ str_initcap(char *buff, size_t nbytes)
                /* Output workspace cannot have more codes than input bytes */
                workspace = (wchar_t *) palloc((nbytes + 1) * sizeof(wchar_t));
 
-               char2wchar(workspace, nbytes + 1, buff, nbytes + 1);
+               char2wchar(workspace, nbytes + 1, buff, nbytes);
 
                for (curr_char = 0; workspace[curr_char] != 0; curr_char++)
                {