Skip to content

[Code scan] Delete OFDFT KEDF_Manager with scalar delete #7548

Description

@njzjz

This issue is a result of a Codex global repository scan.

ESolver_OF::before_all_runners() deletes kedf_manager_ with delete[], but the pointer is allocated with scalar new KEDF_Manager() and the destructor uses scalar delete. Re-entering this setup path can therefore invoke undefined behavior / heap corruption.

Declaration:

protected:
// ======================= variables ==========================
// ---------- the kinetic energy density functionals ----------
KEDF_Manager* kedf_manager_ = nullptr; // KEDF manager, which will be initialized in before_all_runners

Destructor and reinitialization path:

delete this->ptemp_rho_;
delete this->kedf_manager_;

delete[] this->kedf_manager_;
this->kedf_manager_ = new KEDF_Manager();
this->kedf_manager_->init(inp, this->pw_rho, this->dV_, this->nelec_[0]);

Relevant code:

KEDF_Manager* kedf_manager_ = nullptr;
...
delete this->kedf_manager_;
...
delete[] this->kedf_manager_;
this->kedf_manager_ = new KEDF_Manager();

Suggested fix:

Use scalar delete in before_all_runners(), set the pointer to nullptr after deletion, or replace this raw owner with std::unique_ptr<KEDF_Manager>.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    Status
    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions