mirror of
https://github.com/ossrs/srs.git
synced 2025-02-13 11:51:57 +00:00
Fix bug when the value of http header is empty (#2888)
* Fix bug when the value of http header is empty * add utest
This commit is contained in:
parent
a4a231e396
commit
290c3b95a5
2 changed files with 26 additions and 5 deletions
|
@ -263,12 +263,12 @@ int SrsHttpParser::on_header_value(http_parser* parser, const char* at, size_t l
|
||||||
|
|
||||||
if (length > 0) {
|
if (length > 0) {
|
||||||
obj->field_value.append(at, (int)length);
|
obj->field_value.append(at, (int)length);
|
||||||
}
|
|
||||||
|
|
||||||
// When header parsed, we must save the position of start for body,
|
// When header parsed, we must save the position of start for body,
|
||||||
// because we have to consume the header in buffer.
|
// because we have to consume the header in buffer.
|
||||||
// @see https://github.com/ossrs/srs/issues/1508
|
// @see https://github.com/ossrs/srs/issues/1508
|
||||||
obj->p_header_tail = at;
|
obj->p_header_tail = at;
|
||||||
|
}
|
||||||
|
|
||||||
srs_info("Header value(%d bytes): %.*s", (int)length, (int)length, at);
|
srs_info("Header value(%d bytes): %.*s", (int)length, (int)length, at);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -143,6 +143,16 @@ string mock_http_response2(int status, string content)
|
||||||
return ss.str();
|
return ss.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string mock_http_response3(int status, string content)
|
||||||
|
{
|
||||||
|
stringstream ss;
|
||||||
|
ss << "HTTP/1.1 " << status << " " << srs_generate_http_status_text(status) << "\r\n"
|
||||||
|
<< "Server:" << "\r\n"
|
||||||
|
<< "\r\n"
|
||||||
|
<< content;
|
||||||
|
return ss.str();
|
||||||
|
}
|
||||||
|
|
||||||
bool is_string_contain(string substr, string str)
|
bool is_string_contain(string substr, string str)
|
||||||
{
|
{
|
||||||
return (string::npos != str.find(substr));
|
return (string::npos != str.find(substr));
|
||||||
|
@ -528,6 +538,17 @@ VOID TEST(ProtocolHTTPTest, ClientRequest)
|
||||||
EXPECT_STREQ("Hello, world!", res.c_str());
|
EXPECT_STREQ("Hello, world!", res.c_str());
|
||||||
srs_freep(msg);
|
srs_freep(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Normal case, with empty server.
|
||||||
|
if(true) {
|
||||||
|
MockBufferIO io; io.append(mock_http_response3(200, "Hello, world!"));
|
||||||
|
SrsHttpParser hp; HELPER_ASSERT_SUCCESS(hp.initialize(HTTP_RESPONSE));
|
||||||
|
ISrsHttpMessage* msg = NULL; HELPER_ASSERT_SUCCESS(hp.parse_message(&io, &msg));
|
||||||
|
string res; HELPER_ASSERT_SUCCESS(msg->body_read_all(res));
|
||||||
|
EXPECT_EQ(200, msg->status_code());
|
||||||
|
EXPECT_STREQ("Hello, world!", res.c_str());
|
||||||
|
srs_freep(msg);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID TEST(ProtocolHTTPTest, ResponseHTTPError)
|
VOID TEST(ProtocolHTTPTest, ResponseHTTPError)
|
||||||
|
|
Loading…
Reference in a new issue