Multiple Invocations of cpr::MultiPerform Segfault
COM8 opened this issue · 0 comments
COM8 commented
Description
Invoking any cpr::MultiPerform
request e.g. cpr::MultiPerform::Get();
multiple times on the same object leads to a crash (SegFault) during the second invocation.
This leads to cpr::MultiPerform
to being reusable.
Example/How to Reproduce
Here is an example test case:
TEST(MultiperformGetTests, MultiperformSingleSessionMultiGetTest) {
Url url{server->GetBaseUrl() + "/hello.html"};
std::shared_ptr<Session> session = std::make_shared<Session>();
session->SetUrl(url);
MultiPerform multiperform;
multiperform.AddSession(session);
std::vector<Response> responses = multiperform.Get();
EXPECT_EQ(responses.size(), 1);
std::string expected_text{"Hello world!"};
EXPECT_EQ(expected_text, responses.at(0).text);
EXPECT_EQ(url, responses.at(0).url);
EXPECT_EQ(std::string{"text/html"}, responses.at(0).header["content-type"]);
EXPECT_EQ(200, responses.at(0).status_code);
EXPECT_EQ(ErrorCode::OK, responses.at(0).error.code);
// Invoke for the second time
responses = multiperform.Get(); // Fails here
EXPECT_EQ(responses.size(), 1);
EXPECT_EQ(expected_text, responses.at(0).text);
EXPECT_EQ(url, responses.at(0).url);
EXPECT_EQ(std::string{"text/html"}, responses.at(0).header["content-type"]);
EXPECT_EQ(200, responses.at(0).status_code);
EXPECT_EQ(ErrorCode::OK, responses.at(0).error.code);
}
Possible Fix
No response
Where did you get it from?
GitHub (branch e.g. master)
Additional Context/Your Environment
- OS: Fedora 39
- Version: Master as of 28.04.2024 - bed704f