Module: wine Branch: master Commit: 638c8e3847212f1d5399643c30fddcf7afc8c6ee URL: http://source.winehq.org/git/wine.git/?a=commit;h=638c8e3847212f1d5399643c30...
Author: Piotr Caban piotr@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);