ws2_32: Only examine lower-order bits in getsockopt/setsockopt

Juan Lang juan.lang at gmail.com
Wed Aug 19 10:21:12 CDT 2009


Fixes bug 17898.
--Juan
-------------- next part --------------
From 1728af8e675fbd5ce4c754b00f18a6b78c5022a7 Mon Sep 17 00:00:00 2001
From: Juan Lang <juan.lang at gmail.com>
Date: Thu, 13 Aug 2009 10:13:55 -0700
Subject: [PATCH 2/2] Only examine lower-order bits in getsockopt/setsockopt

---
 dlls/ws2_32/socket.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c
index 273f84a..cdea490 100644
--- a/dlls/ws2_32/socket.c
+++ b/dlls/ws2_32/socket.c
@@ -1779,6 +1779,8 @@ INT WINAPI WS_getsockopt(SOCKET s, INT level,
     TRACE("socket: %04lx, level 0x%x, name 0x%x, ptr %p, len %d\n",
           s, level, optname, optval, *optlen);
 
+    /* Some apps sign-extend the level, so mask off the higher-order bits */
+    level &= 0x0000ffff;
     switch(level)
     {
     case WS_SOL_SOCKET:
@@ -3081,6 +3083,8 @@ int WINAPI WS_setsockopt(SOCKET s, int level, int optname,
         return SOCKET_ERROR;
     }
 
+    /* Some apps sign-extend the level, so mask off the higher-order bits */
+    level &= 0x0000ffff;
     switch(level)
     {
     case WS_SOL_SOCKET:
-- 
1.6.3.2


More information about the wine-patches mailing list