setupapi: Fix for SetupGetIntField, with tests.
diff --git a/dlls/setupapi/parser.c b/dlls/setupapi/parser.c index f6de4ed..a00e068 100644 --- a/dlls/setupapi/parser.c +++ b/dlls/setupapi/parser.c
@@ -1711,21 +1711,26 @@ char *end, *buffer = localbuff; DWORD required; INT res; - BOOL ret = FALSE; + BOOL ret; - if (!SetupGetStringFieldA( context, index, localbuff, sizeof(localbuff), &required )) + if (!(ret = SetupGetStringFieldA( context, index, localbuff, sizeof(localbuff), &required ))) { if (GetLastError() != ERROR_INSUFFICIENT_BUFFER) return FALSE; if (!(buffer = HeapAlloc( GetProcessHeap(), 0, required ))) return FALSE; - if (!SetupGetStringFieldA( context, index, buffer, required, NULL )) goto done; + if (!(ret = SetupGetStringFieldA( context, index, buffer, required, NULL ))) goto done; } - res = strtol( buffer, &end, 0 ); - if (end != buffer && !*end) + /* The call to SetupGetStringFieldA succeeded. If buffer is empty we have an optional field */ + if (!*buffer) *result = 0; + else { - *result = res; - ret = TRUE; + res = strtol( buffer, &end, 0 ); + if (end != buffer && !*end) *result = res; + else + { + SetLastError( ERROR_INVALID_DATA ); + ret = FALSE; + } } - else SetLastError( ERROR_INVALID_DATA ); done: if (buffer != localbuff) HeapFree( GetProcessHeap(), 0, buffer );