Do not allow duplicated manifest.vendor-ndk.version.
As specified by VINTF doc in P, the following is not allowed:
<manifest...>
<vendor-ndk><version>27</version></vendor-ndk>
<vendor-ndk><version>27</version></vendor-ndk>
</manifest>
Test: libvintf_test
Change-Id: Ib9d42d2d75b7362c268597bc947c214e03dd5d00
Fixes: 72461606
diff --git a/parse_xml.cpp b/parse_xml.cpp
index 9f53d72..7abbc55 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -866,6 +866,16 @@
return false;
}
+ std::set<std::string> vendorNdkVersions;
+ for (const auto& vendorNdk : object->framework.mVendorNdks) {
+ if (vendorNdkVersions.find(vendorNdk.version()) != vendorNdkVersions.end()) {
+ this->mLastError =
+ "Duplicated manifest.vendor-ndk.version " + vendorNdk.version();
+ return false;
+ }
+ vendorNdkVersions.insert(vendorNdk.version());
+ }
+
if (!parseOptionalChild(root, systemSdkConverter, {}, &object->framework.mSystemSdk)) {
return false;
}
diff --git a/test/LibVintfTest.cpp b/test/LibVintfTest.cpp
index 149afc5..ef19a4c 100644
--- a/test/LibVintfTest.cpp
+++ b/test/LibVintfTest.cpp
@@ -2410,6 +2410,23 @@
}
}
+TEST_F(LibVintfTest, DuplicatedVendorNdkVersion) {
+ std::string error;
+ HalManifest manifest;
+ std::string xml =
+ "<manifest version=\"1.0\" type=\"framework\">\n"
+ " <vendor-ndk>\n"
+ " <version>27</version>\n"
+ " </vendor-ndk>\n"
+ " <vendor-ndk>\n"
+ " <version>27</version>\n"
+ " </vendor-ndk>\n"
+ "</manifest>\n";
+
+ EXPECT_FALSE(gHalManifestConverter(&manifest, xml));
+ EXPECT_EQ("Duplicated manifest.vendor-ndk.version 27", gHalManifestConverter.lastError());
+}
+
TEST_F(LibVintfTest, ManifestHalOverride) {
HalManifest manifest;
std::string xml =