From: Piotr Caban piotr@codeweavers.com
--- dlls/msvcrt/mbcs.c | 15 ++++++--------- dlls/msvcrt/tests/string.c | 2 +- 2 files changed, 7 insertions(+), 10 deletions(-)
diff --git a/dlls/msvcrt/mbcs.c b/dlls/msvcrt/mbcs.c index d098f5b23f4..e275991343d 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2194,15 +2194,12 @@ unsigned char* CDECL _mbsupr(unsigned char* s) */ int CDECL _mbsupr_s_l(unsigned char* s, size_t len, _locale_t locale) { + unsigned char *p = s; + if (!s && !len) - { return 0; - } - else if (!s || !len) - { - *_errno() = EINVAL; + if (!MSVCRT_CHECK_PMT(s && len)) return EINVAL; - }
if (get_mbcinfo()->ismbcodepage) { @@ -2225,12 +2222,12 @@ int CDECL _mbsupr_s_l(unsigned char* s, size_t len, _locale_t locale) *s = _toupper_l(*s, locale); }
- if (*s) + if (!MSVCRT_CHECK_PMT(len)) { - *s = '\0'; - *_errno() = EINVAL; + *p = 0; return EINVAL; } + *s = 0; return 0; }
diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c index 905607e416d..7a3d4b636b3 100644 --- a/dlls/msvcrt/tests/string.c +++ b/dlls/msvcrt/tests/string.c @@ -2879,7 +2879,7 @@ static void test__mbsupr_s(void)
memcpy(buffer, "abcdefgh", sizeof("abcdefgh")); errno = EBADF; - ret = p_mbsupr_s(buffer, 4); + ret = p_mbsupr_s(buffer, sizeof("abcdefgh") - 1); ok(ret == EINVAL, "Expected _mbsupr_s to return EINVAL, got %d\n", ret); ok(errno == EINVAL, "Expected errno to be EINVAL, got %d\n", errno);