From 74d9d282207012fcd00268696df42232ff25376e Mon Sep 17 00:00:00 2001 From: frostmoss Date: Sat, 28 Mar 2026 14:18:52 +0800 Subject: [PATCH 1/2] Refactor: replace fixed-size char array with std::string to prevent buffer overflow in input.cpp --- source/source_pw/module_ofdft/ml_tools/input.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/source_pw/module_ofdft/ml_tools/input.cpp b/source/source_pw/module_ofdft/ml_tools/input.cpp index aadb1ecc02..79376ca599 100644 --- a/source/source_pw/module_ofdft/ml_tools/input.cpp +++ b/source/source_pw/module_ofdft/ml_tools/input.cpp @@ -1,5 +1,5 @@ #include "./input.h" - +#include void Input::readInput() { std::ifstream ifs("nnINPUT", std::ios::in); @@ -9,7 +9,7 @@ void Input::readInput() exit(0); } - char word[80]; + std::string word; int ierr = 0; ifs.rdstate(); From 042649e9d843bc121514632451e4eec24398869e Mon Sep 17 00:00:00 2001 From: frostmoss Date: Sat, 28 Mar 2026 15:11:43 +0800 Subject: [PATCH 2/2] change the random number --- source/source_pw/module_stodft/sto_wf.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/source/source_pw/module_stodft/sto_wf.cpp b/source/source_pw/module_stodft/sto_wf.cpp index e844503a11..9242d902cc 100644 --- a/source/source_pw/module_stodft/sto_wf.cpp +++ b/source/source_pw/module_stodft/sto_wf.cpp @@ -1,5 +1,5 @@ #include "sto_wf.h" - +#include #include "source_base/memory.h" #include "source_io/module_parameter/parameter.h" @@ -136,11 +136,13 @@ void Stochastic_WF::update_sto_orbitals(const int seed_in) { const int nchi = PARAM.inp.nbands_sto; this->chi0_cpu->fix_k(0); + static std::mt19937 gen(std::random_device{}()); + std::uniform_real_distribution dist(0.0, 1.0); if (seed_in >= 0) { for (int i = 0; i < this->chi0_cpu->size(); ++i) - { - const double phi = 2 * ModuleBase::PI * rand() / double(RAND_MAX); + { + const double phi = 2 * ModuleBase::PI * dist(gen); this->chi0_cpu->get_pointer()[i] = std::complex(cos(phi), sin(phi)) / sqrt(double(nchi)); } } @@ -148,7 +150,7 @@ void Stochastic_WF::update_sto_orbitals(const int seed_in) { for (int i = 0; i < this->chi0_cpu->size(); ++i) { - if (rand() / double(RAND_MAX) < 0.5) + if (dist(gen) < 0.5) { this->chi0_cpu->get_pointer()[i] = -1.0 / sqrt(double(nchi)); }