diff options
author | Jay Satiro <raysatiro@yahoo.com> | 2015-07-22 01:52:17 -0400 |
---|---|---|
committer | Jay Satiro <raysatiro@yahoo.com> | 2015-07-22 01:55:43 -0400 |
commit | 40c921f8b825c80bfe0d34f3137f1ece122369c6 (patch) | |
tree | 53641d69efe537ea92b0b22fd59a0c275d9fefa8 /lib/connect.c | |
parent | 7a8e861a56ab0ef0a3a621f53b5f5ba999b27576 (diff) |
Windows: Fix VerifyVersionInfo calls
- Fix the VerifyVersionInfo calls, which we use to test for the OS major
version, to also test for the minor version as well as the service pack
major and minor versions.
MSDN: "If you are testing the major version, you must also test the
minor version and the service pack major and minor versions."
https://msdn.microsoft.com/en-us/library/windows/desktop/ms725492.aspx
Bug: https://github.com/bagder/curl/pull/353#issuecomment-123493098
Reported-by: Marcel Raad <MarcelRaad@users.noreply.github.com>
Diffstat (limited to 'lib/connect.c')
-rw-r--r-- | lib/connect.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/connect.c b/lib/connect.c index 7202fa639..5cb89280c 100644 --- a/lib/connect.c +++ b/lib/connect.c @@ -949,16 +949,17 @@ void Curl_sndbufset(curl_socket_t sockfd) detectOsState = DETECT_OS_VISTA_OR_LATER; } #else - ULONGLONG majorVersionMask; - OSVERSIONINFOEX osver; + ULONGLONG cm; + OSVERSIONINFOEX osver = { sizeof osver, majorVersion, }; - memset(&osver, 0, sizeof(osver)); - osver.dwOSVersionInfoSize = sizeof(osver); - osver.dwMajorVersion = majorVersion; - majorVersionMask = VerSetConditionMask(0, VER_MAJORVERSION, - VER_GREATER_EQUAL); + cm = VerSetConditionMask(0, VER_MAJORVERSION, VER_GREATER_EQUAL); + cm = VerSetConditionMask(cm, VER_MINORVERSION, VER_GREATER_EQUAL); + cm = VerSetConditionMask(cm, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL); + cm = VerSetConditionMask(cm, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL); - if(VerifyVersionInfo(&osver, VER_MAJORVERSION, majorVersionMask)) + if(VerifyVersionInfo(&osver, (VER_MAJORVERSION | VER_MINORVERSION | + VER_SERVICEPACKMAJOR | VER_SERVICEPACKMINOR), + cm)) detectOsState = DETECT_OS_VISTA_OR_LATER; else detectOsState = DETECT_OS_PREVISTA; |