diff --git a/lib/core/private.h b/lib/core/private.h index d108e18e6..e4d25170d 100644 --- a/lib/core/private.h +++ b/lib/core/private.h @@ -134,8 +134,10 @@ // Visual studio older than 2015 and WIN_CE has only _stricmp #if (defined(_MSC_VER) && _MSC_VER < 1900) || defined(_WIN32_WCE) #define strcasecmp _stricmp + #define strncasecmp _strnicmp #elif !defined(__MINGW32__) #define strcasecmp stricmp + #define strncasecmp strnicmp #endif #define getdtablesize() 30000 #endif diff --git a/lib/roles/ws/client-ws.c b/lib/roles/ws/client-ws.c index ab3709654..9c8de75d9 100644 --- a/lib/roles/ws/client-ws.c +++ b/lib/roles/ws/client-ws.c @@ -300,15 +300,17 @@ lws_client_ws_upgrade(struct lws *wsi, const char **cce) e = lws_tokenize(&ts); switch (e) { case LWS_TOKZE_TOKEN: - if (!strcasecmp(ts.token, "upgrade")) + if (!strncasecmp(ts.token, "upgrade", ts.token_len)) e = LWS_TOKZE_ENDED; break; case LWS_TOKZE_DELIMITER: break; - default: /* includes ENDED */ + default: /* includes ENDED found by the tokenizer itself */ bad_conn_format: + lwsl_info("%s: malfored connection '%s'\n", + __func__, buf); *cce = "HS: UPGRADE malformed"; goto bail3; }