#include <cassert>
#include <map>
+#include <set>
#include <utility>
#include "manifest_parser/manifest_util.h"
const char kLabelLangKey[] = "@lang";
const char kLabelTextKey[] = "#text";
const char kPreload[] = "@preload";
+const std::set<std::string> kInstallLocationAllowedValues =
+ {"auto", "internal-only", "prefer-external"};
-void ParsePackageAndStore(
+bool ParsePackageAndStore(
const parser::DictionaryValue& manifest_dict,
PackageInfo* pkg_info) {
std::string xmlns;
if (install_location.empty()) {
pkg_info->set_install_location(kAutoInstallLocation);
} else {
+ if (kInstallLocationAllowedValues.find(install_location) ==
+ kInstallLocationAllowedValues.end())
+ return false;
pkg_info->set_install_location(install_location);
}
label_dict->GetString(kLabelTextKey, &text);
pkg_info->AddLabel(lang, text);
}
+ return true;
}
} // namespace
if (value->GetType() == parser::Value::TYPE_DICTIONARY) {
const parser::DictionaryValue* dict = nullptr;
value->GetAsDictionary(&dict);
- ParsePackageAndStore(*dict, pkg_info.get());
+ if (!ParsePackageAndStore(*dict, pkg_info.get())) {
+ *error = "Cannot parse manifest element";
+ return false;
+ }
} else {
*error = "Cannot parse manifest element";
return false;