diff options
| author | arcadia-devtools <[email protected]> | 2022-04-21 02:29:21 +0300 | 
|---|---|---|
| committer | arcadia-devtools <[email protected]> | 2022-04-21 02:29:21 +0300 | 
| commit | 29486e56aab0f6709271b5f3f61035d8224f5bb0 (patch) | |
| tree | b4e0fc0d9c5548fe8b3d5fd89d3d823783bbd65b /library/cpp | |
| parent | 168b49d756bf779f776edbb2493bfb49f22d633c (diff) | |
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 e8bf6df1a1c..ed5e8872c92 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 3e13046fd07..f62d09f085f 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 cc62bb988e7..7fc918f74f5 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;  | 
