From: Alex Henrie Subject: [PATCH v2] msvcrt/tests: Add tests for mbstowcs and wcstombs with a negative count. Message-Id: <20160614041639.2674-1-alexhenrie24@gmail.com> Date: Mon, 13 Jun 2016 22:16:39 -0600 Cc: Piotr Caban Signed-off-by: Alex Henrie --- dlls/msvcrt/tests/string.c | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/dlls/msvcrt/tests/string.c b/dlls/msvcrt/tests/string.c index 8e78695..1a050cc 100644 --- a/dlls/msvcrt/tests/string.c +++ b/dlls/msvcrt/tests/string.c @@ -1837,16 +1837,13 @@ static void test_mbstowcs(void) static const char mHiragana[] = { 0x82,0xa0,0x82,0xa1,0 }; const wchar_t *pwstr; - wchar_t wOut[6]; - char mOut[6]; + wchar_t wOut[8] = { '!','!','!','!','!','!','!',0 }; + char mOut[8] = "!!!!!!!"; size_t ret; int err; const char *pmbstr; mbstate_t state; - wOut[4] = '!'; wOut[5] = '\0'; - mOut[4] = '!'; mOut[5] = '\0'; - if(pmbstowcs_s) { /* crashes on some systems */ errno = 0xdeadbeef; @@ -1858,6 +1855,24 @@ static void test_mbstowcs(void) ret = mbstowcs(NULL, mSimple, 0); ok(ret == 4, "mbstowcs did not return 4\n"); + ret = mbstowcs(wOut, mSimple, -1); +todo_wine + ok(ret == 4 || broken(ret == -1) /* vista and later */, "mbstowcs did not return 4\n"); +todo_wine + ok(!memcmp(wOut, wSimple, 5*sizeof(wchar_t)) || broken(wOut[0] == 0), + "wOut = %s\n", wine_dbgstr_w(wOut)); + ok(wOut[5] == '!', "wOut[5] != \'!\'\n"); + + wOut[0] = '!'; wOut[1] = '!'; wOut[2] = '!'; wOut[3] = '!'; wOut[4] = '!'; wOut[5] = '!'; + ret = mbstowcs(wOut, mSimple, -1000); +todo_wine + ok(ret == 4 || broken(ret == -1) /* vista and later */, "mbstowcs did not return 4\n"); +todo_wine + ok(!memcmp(wOut, wSimple, 5*sizeof(wchar_t)) || broken(wOut[0] == 0), + "wOut = %s\n", wine_dbgstr_w(wOut)); + ok(wOut[5] == '!', "wOut[5] != \'!\'\n"); + + wOut[0] = '!'; wOut[1] = '!'; wOut[2] = '!'; wOut[3] = '!'; wOut[4] = '!'; wOut[5] = '!'; ret = mbstowcs(wOut, mSimple, 4); ok(ret == 4, "mbstowcs did not return 4\n"); ok(!memcmp(wOut, wSimple, 4*sizeof(wchar_t)), "wOut = %s\n", wine_dbgstr_w(wOut)); @@ -1866,6 +1881,18 @@ static void test_mbstowcs(void) ret = wcstombs(NULL, wSimple, 0); ok(ret == 4, "wcstombs did not return 4\n"); + ret = wcstombs(mOut, wSimple, -1); + ok(ret == 4 || broken(ret == -1) /* vista and later */, "wcstombs did not return 4\n"); + ok(!memcmp(mOut, mSimple, 5*sizeof(char)) || broken(mOut[0] == '!'), "mOut = %s\n", mOut); + ok(mOut[5] == '!', "mOut[5] != \'!\'\n"); + + memset(mOut, '!', 6*sizeof(char)); + ret = wcstombs(mOut, wSimple, -1000); + ok(ret == 4 || broken(ret == -1) /* vista and later */, "wcstombs did not return 4\n"); + ok(!memcmp(mOut, mSimple, 5*sizeof(char)) || broken(mOut[0] == '!'), "mOut = %s\n", mOut); + ok(mOut[5] == '!', "mOut[5] != \'!\'\n"); + + memset(mOut, '!', 6*sizeof(char)); ret = wcstombs(mOut, wSimple, 6); ok(ret == 4, "wcstombs did not return 4\n"); ok(!memcmp(mOut, mSimple, 5*sizeof(char)), "mOut = %s\n", mOut); -- 2.8.3