(ixwebsocket) Fix #252 / regression in 11.0.2 with string comparisons

This commit is contained in:
Benjamin Sergeant 2020-11-16 08:41:08 -08:00
parent 80432edbd0
commit 866670a906
6 changed files with 75 additions and 4 deletions

View File

@ -2,6 +2,10 @@
All changes to this project will be documented in this file.
## [11.0.3] - 2020-11-16
(ixwebsocket) Fix #252 / regression in 11.0.2 with string comparisons
## [11.0.2] - 2020-11-15
(ixwebsocket) use a C++11 compatible make_unique shim

View File

@ -105,6 +105,24 @@ namespace ix
return ret;
#else
//
// It was reported that on Android poll can fail and return -1 with
// errno == EINTR, which should be a temp error and should typically
// be handled by retrying in a loop.
// Maybe we need to put all syscall / C functions in
// a new IXSysCalls.cpp and wrap them all.
//
// The style from libuv is as such.
//
// int ret = -1;
// do
// {
// ret = ::poll(fds, nfds, timeout);
// }
// while (ret == -1 && errno == EINTR);
// return ret;
//
return ::poll(fds, nfds, timeout);
#endif
}

View File

@ -8,10 +8,10 @@
#include "IXHttp.h"
#include "IXSocketConnect.h"
#include "IXStrCaseCompare.h"
#include "IXUrlParser.h"
#include "IXUserAgent.h"
#include "IXWebSocketHandshakeKeyGen.h"
#include "IXStrCaseCompare.h"
#include <algorithm>
#include <iostream>
#include <random>
@ -36,7 +36,7 @@ namespace ix
bool WebSocketHandshake::insensitiveStringCompare(const std::string& a, const std::string& b)
{
return CaseInsensitiveLess::cmp(a, b);
return CaseInsensitiveLess::cmp(a, b) == 0;
}
std::string WebSocketHandshake::genRandomString(const int len)

View File

@ -6,4 +6,4 @@
#pragma once
#define IX_WEBSOCKET_VERSION "11.0.2"
#define IX_WEBSOCKET_VERSION "11.0.3"

View File

@ -13,7 +13,6 @@ option(USE_TLS "Add TLS support" ON)
set (TEST_TARGET_NAMES
IXSocketTest
IXSocketConnectTest
# IXWebSocketLeakTest.cpp # commented until we have a fix for #224
IXWebSocketServerTest
IXWebSocketTestConnectionDisconnection
IXUrlParserTest
@ -28,6 +27,7 @@ set (TEST_TARGET_NAMES
IXWebSocketBroadcastTest
IXWebSocketPerMessageDeflateCompressorTest
IXStreamSqlTest
IXStrCaseCompareTest
)
# Some unittest don't work on windows yet
@ -47,6 +47,9 @@ endif()
# IXWebSocketPingTest.cpp
# IXWebSocketPingTimeoutTest.cpp
# IXWebSocketLeakTest.cpp # commented until we have a fix for #224 /
# that was was fixed but now the test does not compile
# Disable tests for now that are failing or not reliable
find_package(JsonCpp)

View File

@ -0,0 +1,46 @@
/*
* IXStrCaseCompareTest.cpp
* Author: Benjamin Sergeant
* Copyright (c) 2020 Machine Zone. All rights reserved.
*/
#include "IXTest.h"
#include "catch.hpp"
#include <iostream>
#include <ixwebsocket/IXUrlParser.h>
#include <string.h>
using namespace ix;
namespace ix
{
TEST_CASE("str_case_compare", "[str_case_compare]")
{
SECTION("1")
{
using HttpHeaders = std::map<std::string, std::string, CaseInsensitiveLess>;
HttpHeaders httpHeaders;
httpHeaders["foo"] = "foo";
REQUIRE(httpHeaders["foo"] == "foo");
REQUIRE(httpHeaders["missing"] == "");
// Comparison should be case insensitive
REQUIRE(httpHeaders["Foo"] == "foo");
}
SECTION("2")
{
using HttpHeaders = std::map<std::string, std::string, CaseInsensitiveLess>;
HttpHeaders headers;
headers["Upgrade"] = "webSocket";
REQUIRE(CaseInsensitiveLess::cmp(headers["upgrade"], "WebSocket") == 0);
}
}
} // namespace ix