Piotr Caban : msvcrt: Don't overwrite unmatched string in scanf.

Alexandre Julliard julliard at winehq.org
Thu Jan 16 14:52:27 CST 2014


Module: wine
Branch: master
Commit: 638c8e3847212f1d5399643c30fddcf7afc8c6ee
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=638c8e3847212f1d5399643c30fddcf7afc8c6ee

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Thu Jan 16 11:39:44 2014 +0100

msvcrt: Don't overwrite unmatched string in scanf.

---

 dlls/msvcrt/scanf.h       |    4 ++--
 dlls/msvcrt/tests/scanf.c |    7 +++++++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/dlls/msvcrt/scanf.h b/dlls/msvcrt/scanf.h
index 7f618f4..e85f343 100644
--- a/dlls/msvcrt/scanf.h
+++ b/dlls/msvcrt/scanf.h
@@ -478,7 +478,7 @@ _FUNCTION_ {
 			if (width>0) width--;
                     }
                     /* terminate */
-                    if (!suppress) *sptr = 0;
+                    if (st && !suppress) *sptr = 0;
                 }
                 break;
 	    widecharstring: { /* read a word into a wchar_t* */
@@ -508,7 +508,7 @@ _FUNCTION_ {
 			if (width>0) width--;
                     }
                     /* terminate */
-                    if (!suppress) *sptr = 0;
+                    if (st && !suppress) *sptr = 0;
                 }
                 break;
             /* 'c' and 'C work analogously to 's' and 'S' as described
diff --git a/dlls/msvcrt/tests/scanf.c b/dlls/msvcrt/tests/scanf.c
index b09e7df..97b8074 100644
--- a/dlls/msvcrt/tests/scanf.c
+++ b/dlls/msvcrt/tests/scanf.c
@@ -131,6 +131,13 @@ static void test_sscanf( void )
     ok( ret == 1, "Error with format \"%s\"\n","%*[a-cd-dg-e]%c");
     ok( buffer[0] == 'h', "Error with \"abcefgdh\" \"%c\"\n", buffer[0]);
 
+    buffer1[0] = 'b';
+    ret = sscanf("a","%s%s", buffer, buffer1);
+    ok( ret == 1, "expected 1, got %u\n", ret);
+    ok( buffer[0] == 'a', "buffer[0] = '%c'\n", buffer[0]);
+    ok( buffer[1] == '\0', "buffer[1] = '%c'\n", buffer[1]);
+    ok( buffer1[0] == 'b', "buffer1[0] = '%c'\n", buffer1[0]);
+
     /* check digits */
     ret = sprintf(buffer,"%d:%d:%d",hour,min,sec);
     ok( ret == 8, "expected 8, got %u\n", ret);




More information about the wine-cvs mailing list