-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Labels
Milestone
Description
Description
cpr::Multiperform assignment is broken once the object has been used before.
Workaround:
Use a std::uniqe_ptr around cpr::Multiperform.
Example/How to Reproduce
Take this test case:
TEST(MultiperformGetTests, MultiperformAssignAfterUseTest) {
MultiPerform multiperform;
{
Url url{server->GetBaseUrl() + "/hello.html"};
std::shared_ptr<Session> session = std::make_shared<Session>();
session->SetUrl(url);
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);
}
{
Url url{server->GetBaseUrl() + "/hello.html"};
std::shared_ptr<Session> session = std::make_shared<Session>();
session->SetUrl(url);
multiperform = MultiPerform(); // This line does not work if the Muliperform object was used before
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);
}
}
Running it leads to a segmentation fault in Line 361 of `multiperform.cpp`.

Possible Fix
Reset everything during assignment operator.
Where did you get it from?
GitHub (branch e.g. master)
Additional Context/Your Environment
- OS: Fedora 41
- Version: 1.11.2