From f4792e103ad53d430004e8e789b4e338222ab672 Mon Sep 17 00:00:00 2001 From: winesync Date: Mon, 25 Sep 2023 19:51:19 +0200 Subject: [PATCH] [WINESYNC] setupapi: Fix hex digit check in SetupGetBinaryField. Signed-off-by: Jacek Caban Signed-off-by: Alexandre Julliard wine commit id d580d2c2fdad7f6f00dd12923e475298c019b660 by Jacek Caban --- dll/win32/setupapi/parser.c | 15 ++++++++++++--- sdk/tools/winesync/setupapi.cfg | 2 +- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/dll/win32/setupapi/parser.c b/dll/win32/setupapi/parser.c index 02297be7f44..4917cf2eeeb 100644 --- a/dll/win32/setupapi/parser.c +++ b/dll/win32/setupapi/parser.c @@ -1966,6 +1966,15 @@ BOOL WINAPI SetupGetIntField( PINFCONTEXT context, DWORD index, PINT result ) } +static int xdigit_to_int(WCHAR c) +{ + if ('0' <= c && c <= '9') return c - '0'; + if ('a' <= c && c <= 'f') return c - 'a' + 10; + if ('A' <= c && c <= 'F') return c - 'A' + 10; + return -1; +} + + /*********************************************************************** * SetupGetBinaryField (SETUPAPI.@) */ @@ -2000,15 +2009,15 @@ BOOL WINAPI SetupGetBinaryField( PINFCONTEXT context, DWORD index, BYTE *buffer, { const WCHAR *p; DWORD value = 0; - for (p = field->text; *p && iswxdigit(*p); p++) + int d; + for (p = field->text; *p && (d = xdigit_to_int(*p)) != -1; p++) { if ((value <<= 4) > 255) { SetLastError( ERROR_INVALID_DATA ); return FALSE; } - if (*p <= '9') value |= (*p - '0'); - else value |= (towlower(*p) - 'a' + 10); + value |= d; } buffer[i - index] = value; } diff --git a/sdk/tools/winesync/setupapi.cfg b/sdk/tools/winesync/setupapi.cfg index 7e24294b429..109ac92b7a2 100644 --- a/sdk/tools/winesync/setupapi.cfg +++ b/sdk/tools/winesync/setupapi.cfg @@ -10,4 +10,4 @@ files: dlls/setupapi/setupcab.c: dll/win32/setupapi/setupcab.c dlls/setupapi/stringtable.c: dll/win32/setupapi/stringtable_wine.c tags: - wine: 4a3cd01bd150c27d7fd40d04fc92b173f2f988af + wine: d580d2c2fdad7f6f00dd12923e475298c019b660