[PATCH v2] msvcrt/tests: Add tests for mbstowcs and wcstombs with a negative count.

Alex Henrie alexhenrie24 at gmail.com
Mon Jun 13 23:16:39 CDT 2016


Cc: Piotr Caban <piotr at codeweavers.com>

Signed-off-by: Alex Henrie <alexhenrie24 at gmail.com>
---
 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




More information about the wine-patches mailing list