From: Piotr Caban <piotr(a)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 e275991343d..41a46f40495 100644 --- a/dlls/msvcrt/mbcs.c +++ b/dlls/msvcrt/mbcs.c @@ -2114,15 +2114,12 @@ unsigned char* CDECL _mbslwr(unsigned char* s) */ int CDECL _mbslwr_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) { @@ -2145,12 +2142,12 @@ int CDECL _mbslwr_s_l(unsigned char* s, size_t len, _locale_t locale) *s = _tolower_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 7a3d4b636b3..df3f5fceef8 100644 --- a/dlls/msvcrt/tests/string.c +++ b/dlls/msvcrt/tests/string.c @@ -2944,7 +2944,7 @@ static void test__mbslwr_s(void) memcpy(buffer, "ABCDEFGH", sizeof("ABCDEFGH")); errno = EBADF; - ret = p_mbslwr_s(buffer, 4); + ret = p_mbslwr_s(buffer, sizeof("ABCDEFGH") - 1); ok(ret == EINVAL, "Expected _mbslwr_s to return EINVAL, got %d\n", ret); ok(errno == EINVAL, "Expected errno to be EINVAL, got %d\n", errno); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/1090