Skip to content

cpr::Multiperform Assignment Not Working #1186

@COM8

Description

@COM8

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`.

![Image](https://github.com/user-attachments/assets/4857c2e9-b889-44b4-849c-7915f3b71045)

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions