diff options
author | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-04-21 02:29:21 +0300 |
---|---|---|
committer | arcadia-devtools <arcadia-devtools@yandex-team.ru> | 2022-04-21 02:29:21 +0300 |
commit | 29486e56aab0f6709271b5f3f61035d8224f5bb0 (patch) | |
tree | b4e0fc0d9c5548fe8b3d5fd89d3d823783bbd65b /library/cpp | |
parent | 168b49d756bf779f776edbb2493bfb49f22d633c (diff) | |
download | ydb-29486e56aab0f6709271b5f3f61035d8224f5bb0.tar.gz |
intermediate changes
ref:f15213aec8036b5997a8dd8c73570eb4babaa6c2
Diffstat (limited to 'library/cpp')
-rw-r--r-- | library/cpp/http/misc/httpreqdata.cpp | 3 | ||||
-rw-r--r-- | library/cpp/http/misc/httpreqdata_ut.cpp | 12 | ||||
-rw-r--r-- | library/cpp/http/server/http_ut.cpp | 33 |
3 files changed, 47 insertions, 1 deletions
diff --git a/library/cpp/http/misc/httpreqdata.cpp b/library/cpp/http/misc/httpreqdata.cpp index e8bf6df1a1..ed5e8872c9 100644 --- a/library/cpp/http/misc/httpreqdata.cpp +++ b/library/cpp/http/misc/httpreqdata.cpp @@ -128,7 +128,8 @@ const TString& TBaseServerRequestData::GetCurPage() const { bool TBaseServerRequestData::Parse(TStringBuf origReq) { ParseBuf_.reserve(origReq.size() + 16); ParseBuf_.assign(origReq.begin(), origReq.end()); - ParseBuf_.insert(ParseBuf_.end(), 16, ' '); + ParseBuf_.insert(ParseBuf_.end(), 15, ' '); + ParseBuf_.push_back('\0'); char* req = ParseBuf_.data(); while (*req == ' ' || *req == '\t') diff --git a/library/cpp/http/misc/httpreqdata_ut.cpp b/library/cpp/http/misc/httpreqdata_ut.cpp index 3e13046fd0..f62d09f085 100644 --- a/library/cpp/http/misc/httpreqdata_ut.cpp +++ b/library/cpp/http/misc/httpreqdata_ut.cpp @@ -42,6 +42,18 @@ Y_UNIT_TEST_SUITE(TRequestServerDataTest) { UNIT_ASSERT_VALUES_EQUAL(sd.ServerPort(), "678"); } + Y_UNIT_TEST(ParseInvalid) { + TServerRequestData rd; + + //Not crashes on null + UNIT_ASSERT(!rd.Parse(" \0/yandsearch?>a=fake&haha=da HTTP 1.1 OK")); + + rd.Scan(); + UNIT_ASSERT_VALUES_EQUAL(rd.Query(), ""); + UNIT_ASSERT_VALUES_EQUAL(rd.CgiParam.size(), 0); + rd.Clear(); + } + Y_UNIT_TEST(ParseScan) { TServerRequestData rd; diff --git a/library/cpp/http/server/http_ut.cpp b/library/cpp/http/server/http_ut.cpp index cc62bb988e..7fc918f74f 100644 --- a/library/cpp/http/server/http_ut.cpp +++ b/library/cpp/http/server/http_ut.cpp @@ -641,6 +641,39 @@ Y_UNIT_TEST_SUITE(THttpServerTest) { server.Stop(); } + Y_UNIT_TEST(TTestNullInRequest) { + TPortManager pm; + const ui16 port = pm.GetPort(); + + TEchoServer serverImpl("test_data"); + THttpServer::TOptions options(port); + options.nThreads = 1; + options.MaxQueueSize = 0; + options.MaxConnections = 0; + options.KeepAliveEnabled = false; + options.ExpirationTimeout = TDuration::Seconds(1); + options.PollTimeout = TDuration::MilliSeconds(100); + THttpServer server(&serverImpl, options); + UNIT_ASSERT(server.Start()); + + TSocket socket(TNetworkAddress("localhost", port), TDuration::Seconds(5)); + + + TSocketInput si(socket); + TSocketOutput so(socket); + THttpOutput out(&so); + out << "GET \0/ggg HTTP/1.1" << CrLf; + out << "Host: localhost:" + ToString(port) << CrLf; + out << CrLf; + out.Flush(); + + THttpInput input(&si); + input.ReadAll(); + + UNIT_ASSERT_STRING_CONTAINS(input.FirstLine(), "HTTP/1.1 4"); + server.Stop(); + } + Y_UNIT_TEST(TTestCloseConnectionOnRequestLimit) { TPortManager pm; |