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 =