aboutsummaryrefslogtreecommitdiffstats
path: root/library/cpp
diff options
context:
space:
mode:
authorarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-04-21 02:29:21 +0300
committerarcadia-devtools <arcadia-devtools@yandex-team.ru>2022-04-21 02:29:21 +0300
commit29486e56aab0f6709271b5f3f61035d8224f5bb0 (patch)
treeb4e0fc0d9c5548fe8b3d5fd89d3d823783bbd65b /library/cpp
parent168b49d756bf779f776edbb2493bfb49f22d633c (diff)
downloadydb-29486e56aab0f6709271b5f3f61035d8224f5bb0.tar.gz
intermediate changes
ref:f15213aec8036b5997a8dd8c73570eb4babaa6c2
Diffstat (limited to 'library/cpp')
-rw-r--r--library/cpp/http/misc/httpreqdata.cpp3
-rw-r--r--library/cpp/http/misc/httpreqdata_ut.cpp12
-rw-r--r--library/cpp/http/server/http_ut.cpp33
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?&gta=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;