CPS: Fix crash when package requires isn't an object

Check whether a package `requires` is actually an object before trying
to iterate over it.
This commit is contained in:
Matthew Woehlke
2026-06-16 15:03:05 -04:00
parent 06cc1d04d8
commit 01f8d249bf
4 changed files with 38 additions and 0 deletions

View File

@@ -591,6 +591,9 @@ std::vector<cmPackageRequirement> cmPackageInfoReader::GetRequirements() const
std::vector<cmPackageRequirement> requirements;
auto const& requirementObjects = this->Data["requires"];
if (!requirementObjects.isObject()) {
return {};
}
for (auto ri = requirementObjects.begin(), re = requirementObjects.end();
ri != re; ++ri) {

View File

@@ -283,6 +283,19 @@ elseif(NOT TARGET Bar::Target2)
message(SEND_ERROR "Bar::Target2 missing !")
endif()
###############################################################################
# Find some packages with malformatted dependencies.
find_package(Bad1)
if(NOT Bad1_FOUND)
message(SEND_ERROR "Bad1 not found !")
endif()
find_package(Bad2)
if(NOT Bad2_FOUND)
message(SEND_ERROR "Bad2 not found !")
endif()
###############################################################################
# Test requesting components from a package.

View File

@@ -0,0 +1,11 @@
{
"cps_version": "0.13",
"name": "Bad1",
"cps_path": "@prefix@/cps",
"requires": "Broken",
"components": {
"Target": {
"type": "interface"
}
}
}

View File

@@ -0,0 +1,11 @@
{
"cps_version": "0.13",
"name": "Bad2",
"cps_path": "@prefix@/cps",
"requires": [ "Broken" ],
"components": {
"Target": {
"type": "interface"
}
}
}