[PATCH v2 1/2] msvcrt: Fix scanf with leading dash in scanset.
Signed-off-by: Will Mainio <will.mainio(a)fastmail.com> --- dlls/msvcrt/scanf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/msvcrt/scanf.h b/dlls/msvcrt/scanf.h index 3b4686c1107..b0254ef9224 100644 --- a/dlls/msvcrt/scanf.h +++ b/dlls/msvcrt/scanf.h @@ -639,7 +639,7 @@ _FUNCTION_ { while(*format && (*format != ']')) { /* According to msdn: * "Note that %[a-z] and %[z-a] are interpreted as equivalent to %[abcde...z]." */ - if((*format == '-') && (*(format + 1) != ']')) { + if((*format == '-') && (*(format - 1) != '[') && (*(format + 1) != ']')) { if ((*(format - 1)) < *(format + 1)) RtlSetBits(&bitMask, *(format - 1) +1 , *(format + 1) - *(format - 1)); else -- 2.28.0
Signed-off-by: Will Mainio <will.mainio(a)fastmail.com> --- dlls/msvcrt/tests/scanf.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dlls/msvcrt/tests/scanf.c b/dlls/msvcrt/tests/scanf.c index 57d9cc0ba12..4b878e6d64e 100644 --- a/dlls/msvcrt/tests/scanf.c +++ b/dlls/msvcrt/tests/scanf.c @@ -186,6 +186,14 @@ 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]); + ret = p_sscanf("-123","%[-0-9]s",buffer); + ok( ret == 1, "Error with format \"%s\"\n","%[-0-9]s"); + ok( strncmp("-123",buffer,strlen(buffer)) == 0, "Error with \"-123\" \"%s\"\n",buffer); + + ret = p_sscanf("-321","%[0-9-]s",buffer); + ok( ret == 1, "Error with format \"%s\"\n","%[0-9-]s"); + ok( strncmp("-321",buffer,strlen(buffer)) == 0, "Error with \"-321\" \"%s\"\n",buffer); + buffer1[0] = 'b'; ret = p_sscanf("a","%s%s", buffer, buffer1); ok( ret == 1, "expected 1, got %u\n", ret); -- 2.28.0
participants (1)
-
Will Mainio