1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-14 02:08:27 +08:00

Fix out-of-bounds read on empty gcc-style depfile

If a gcc dep file is read that contains no dependencies,
cmReadGccDepfile returns a valid std::optional containing an empty
vector. Check at the call sites in cmDependsCompiler whether the vector
is empty before trying to access the vector's elements.

Fixes: #27270
This commit is contained in:
Joerg Bornemann
2025-10-08 16:41:34 +02:00
committed by Brad King
parent 051b0efd7d
commit 2c300a4c0a

View File

@@ -96,9 +96,9 @@ bool cmDependsCompiler::CheckDependencies(
std::vector<std::string> depends;
if (format == "custom"_s) {
auto deps = cmReadGccDepfile(
cm::optional<cmGccDepfileContent> deps = cmReadGccDepfile(
depFile.c_str(), this->LocalGenerator->GetCurrentBinaryDirectory());
if (!deps) {
if (!deps || deps->empty()) {
continue;
}
@@ -130,10 +130,10 @@ bool cmDependsCompiler::CheckDependencies(
depends.emplace_back(std::move(line));
}
} else if (format == "gcc"_s) {
auto deps = cmReadGccDepfile(
cm::optional<cmGccDepfileContent> deps = cmReadGccDepfile(
depFile.c_str(), this->LocalGenerator->GetCurrentBinaryDirectory(),
GccDepfilePrependPaths::Deps);
if (!deps) {
if (!deps || deps->empty()) {
continue;
}