diff --git a/Source/cmPackageInfoReader.cxx b/Source/cmPackageInfoReader.cxx index f87133232d..dee64d4c9b 100644 --- a/Source/cmPackageInfoReader.cxx +++ b/Source/cmPackageInfoReader.cxx @@ -591,6 +591,9 @@ std::vector cmPackageInfoReader::GetRequirements() const std::vector requirements; auto const& requirementObjects = this->Data["requires"]; + if (!requirementObjects.isObject()) { + return {}; + } for (auto ri = requirementObjects.begin(), re = requirementObjects.end(); ri != re; ++ri) { diff --git a/Tests/FindPackageCpsTest/CMakeLists.txt b/Tests/FindPackageCpsTest/CMakeLists.txt index 232c7d84e1..3d6f01a729 100644 --- a/Tests/FindPackageCpsTest/CMakeLists.txt +++ b/Tests/FindPackageCpsTest/CMakeLists.txt @@ -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. diff --git a/Tests/FindPackageCpsTest/cps/bad1.cps b/Tests/FindPackageCpsTest/cps/bad1.cps new file mode 100644 index 0000000000..96666caa78 --- /dev/null +++ b/Tests/FindPackageCpsTest/cps/bad1.cps @@ -0,0 +1,11 @@ +{ + "cps_version": "0.13", + "name": "Bad1", + "cps_path": "@prefix@/cps", + "requires": "Broken", + "components": { + "Target": { + "type": "interface" + } + } +} diff --git a/Tests/FindPackageCpsTest/cps/bad2.cps b/Tests/FindPackageCpsTest/cps/bad2.cps new file mode 100644 index 0000000000..9756986d5c --- /dev/null +++ b/Tests/FindPackageCpsTest/cps/bad2.cps @@ -0,0 +1,11 @@ +{ + "cps_version": "0.13", + "name": "Bad2", + "cps_path": "@prefix@/cps", + "requires": [ "Broken" ], + "components": { + "Target": { + "type": "interface" + } + } +}