Signed-off-by: Will Mainio will.mainio@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
Signed-off-by: Will Mainio will.mainio@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);