Module: wine Branch: master Commit: c54e0d93d9145055de2b2ea97bdb2c4af90055b8 URL: https://gitlab.winehq.org/wine/wine/-/commit/c54e0d93d9145055de2b2ea97bdb2c4...
Author: Piotr Caban piotr@codeweavers.com Date: Wed Oct 19 13:44:53 2022 +0200
msvcrt: Fix error handling in _mbslwr_s_l.
---
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);