Martin Storsjo : ucrtbase: Extend the printf tests even further.

Alexandre Julliard julliard at winehq.org
Wed May 20 15:35:38 CDT 2020


Module: wine
Branch: master
Commit: 7265cd17b547388ee0080079b772c2ae1722a9bc
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7265cd17b547388ee0080079b772c2ae1722a9bc

Author: Martin Storsjo <martin at martin.st>
Date:   Wed May 20 00:44:14 2020 +0300

ucrtbase: Extend the printf tests even further.

Signed-off-by: Martin Storsjo <martin at martin.st>
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/ucrtbase/tests/printf.c | 93 +++++++++++++++++++++++---------------------
 1 file changed, 48 insertions(+), 45 deletions(-)

diff --git a/dlls/ucrtbase/tests/printf.c b/dlls/ucrtbase/tests/printf.c
index 3b48e08b10..7647ac57e2 100644
--- a/dlls/ucrtbase/tests/printf.c
+++ b/dlls/ucrtbase/tests/printf.c
@@ -90,52 +90,55 @@ static int WINAPIV vsprintf_wrapper(unsigned __int64 options, char *str,
 
 static void test_snprintf (void)
 {
-    const char *tests[] = {"short", "justfit", "justfits", "muchlonger"};
+    const char *tests[] = {"short", "justfit", "justfits", "muchlonger", "", "1"};
     char buffer[8];
-    const int bufsiz = sizeof buffer;
-    unsigned int i;
-
-    /* Legacy _snprintf style termination */
-    for (i = 0; i < ARRAY_SIZE(tests); i++) {
-        const char *fmt  = tests[i];
-        const int expect = strlen(fmt) > bufsiz ? -1 : strlen(fmt);
-        const int n      = vsprintf_wrapper (_CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION, buffer, bufsiz, fmt);
-        const int valid  = n < 0 ? bufsiz : (n == bufsiz ? n : n+1);
-
-        ok (n == expect, "\"%s\": expected %d, returned %d\n",
-            fmt, expect, n);
-        ok (!memcmp (fmt, buffer, valid),
-            "\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
-    }
-
-    /* C99 snprintf style termination */
-    for (i = 0; i < ARRAY_SIZE(tests); i++) {
-        const char *fmt  = tests[i];
-        const int expect = strlen(fmt);
-        const int n      = vsprintf_wrapper (_CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, buffer, bufsiz, fmt);
-        const int valid  = n >= bufsiz ? bufsiz - 1 : n < 0 ? 0 : n;
-
-        ok (n == expect, "\"%s\": expected %d, returned %d\n",
-            fmt, expect, n);
-        ok (!memcmp (fmt, buffer, valid),
-            "\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
-        ok (buffer[valid] == '\0',
-            "\"%s\": Missing null termination (ret %d) - is %d\n", fmt, n, buffer[valid]);
-    }
-
-    /* swprintf style termination */
-    for (i = 0; i < ARRAY_SIZE(tests); i++) {
-        const char *fmt  = tests[i];
-        const int expect = strlen(fmt) >= bufsiz ? -2 : strlen(fmt);
-        const int n      = vsprintf_wrapper (0, buffer, bufsiz, fmt);
-        const int valid  = n < 0 ? bufsiz - 1 : n;
-
-        ok (n == expect, "\"%s\": expected %d, returned %d\n",
-            fmt, expect, n);
-        ok (!memcmp (fmt, buffer, valid),
-            "\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
-        ok (buffer[valid] == '\0',
-            "\"%s\": Missing null termination (ret %d) - is %d\n", fmt, n, buffer[valid]);
+    int bufsizes[] = { 0, 1, sizeof(buffer) };
+    unsigned int i, j;
+
+    for (j = 0; j < ARRAY_SIZE(bufsizes); j++) {
+        const int bufsiz = bufsizes[j];
+        /* Legacy _snprintf style termination */
+        for (i = 0; i < ARRAY_SIZE(tests); i++) {
+            const char *fmt  = tests[i];
+            const int expect = strlen(fmt) > bufsiz ? -1 : strlen(fmt);
+            const int n      = vsprintf_wrapper (_CRT_INTERNAL_PRINTF_LEGACY_VSPRINTF_NULL_TERMINATION, buffer, bufsiz, fmt);
+            const int valid  = n < 0 ? bufsiz : (n == bufsiz ? n : n+1);
+
+            ok (n == expect, "\"%s\": expected %d, returned %d\n",
+                fmt, expect, n);
+            ok (!memcmp (fmt, buffer, valid),
+                "\"%s\": rendered \"%.*s\"\n", fmt, valid, buffer);
+        }
+
+        /* C99 snprintf style termination */
+        for (i = 0; i < ARRAY_SIZE(tests); i++) {
+            const char *fmt  = tests[i];
+            const int expect = strlen(fmt);
+            const int n      = vsprintf_wrapper (_CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, buffer, bufsiz, fmt);
+            const int valid  = n >= bufsiz ? (bufsiz > 0 ? bufsiz - 1 : 0) : n < 0 ? 0 : n;
+
+            ok (n == expect, "\"%s\": expected %d, returned %d\n",
+                fmt, expect, n);
+            ok (!memcmp (fmt, buffer, valid),
+                "\"%s\": rendered \"%.*s\" bufsiz %d\n", fmt, valid, buffer, bufsiz);
+            ok (bufsiz == 0 || buffer[valid] == '\0',
+                "\"%s\": Missing null termination (ret %d) - is %d (bufsiz %d)\n", fmt, n, buffer[valid], bufsiz);
+        }
+
+        /* swprintf style termination */
+        for (i = 0; i < ARRAY_SIZE(tests); i++) {
+            const char *fmt  = tests[i];
+            const int expect = strlen(fmt) >= bufsiz ? bufsiz > 0 ? -2 : -1 : strlen(fmt);
+            const int n      = vsprintf_wrapper (0, buffer, bufsiz, fmt);
+            const int valid  = n < 0 ? bufsiz > 0 ? bufsiz - 1 : 0 : n;
+
+            ok (n == expect, "\"%s\": expected %d, returned %d\n",
+                fmt, expect, n);
+            ok (!memcmp (fmt, buffer, valid),
+                "\"%s\": rendered \"%.*s\" bufsiz %d\n", fmt, valid, buffer, bufsiz);
+            ok (bufsiz == 0 || buffer[valid] == '\0',
+                "\"%s\": Missing null termination (ret %d) - is %d\n", fmt, n, buffer[valid]);
+        }
     }
 
     ok (vsprintf_wrapper (_CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, NULL, 0, "abcd") == 4,




More information about the wine-cvs mailing list