diff --git a/utils/src/b_json/b_json_entity_ext_manage.cpp b/utils/src/b_json/b_json_entity_ext_manage.cpp index 758d2721e896c6a78b89f70f6e419c4cefaf1b16..d367ff3ffdd37f9bb69b0fa9ebe2bd7a2dbf3d0b 100644 --- a/utils/src/b_json/b_json_entity_ext_manage.cpp +++ b/utils/src/b_json/b_json_entity_ext_manage.cpp @@ -44,14 +44,26 @@ struct stat JsonValue2Stat(const Json::Value &value) { struct stat sta = {}; - sta.st_size = value.isMember("st_size") ? value["st_size"].asInt64() : 0; + if (!value.isObject()) { + return sta; + } + + sta.st_size = value.isMember("st_size") && value["st_size"].isInt64() ? value["st_size"].asInt64() : 0; if (value.isMember("st_atim")) { - sta.st_atim.tv_sec = value["st_atim"].isMember("tv_sec") ? value["st_atim"]["tv_sec"].asInt64() : 0; - sta.st_atim.tv_nsec = value["st_atim"].isMember("tv_nsec") ? value["st_atim"]["tv_nsec"].asInt64() : 0; + sta.st_atim.tv_sec = value["st_atim"].isMember("tv_sec") && value["st_atim"]["tv_sec"].isInt64() + ? value["st_atim"]["tv_sec"].asInt64() + : 0; + sta.st_atim.tv_nsec = value["st_atim"].isMember("tv_nsec") && value["st_atim"]["tv_nsec"].isInt64() + ? value["st_atim"]["tv_nsec"].asInt64() + : 0; } if (value.isMember("st_mtim")) { - sta.st_mtim.tv_sec = value["st_mtim"].isMember("tv_sec") ? value["st_mtim"]["tv_sec"].asInt64() : 0; - sta.st_mtim.tv_nsec = value["st_mtim"].isMember("tv_nsec") ? value["st_mtim"]["tv_nsec"].asInt64() : 0; + sta.st_mtim.tv_sec = value["st_mtim"].isMember("tv_sec") && value["st_mtim"]["tv_sec"].isInt64() + ? value["st_mtim"]["tv_sec"].asInt64() + : 0; + sta.st_mtim.tv_nsec = value["st_mtim"].isMember("tv_nsec") && value["st_mtim"]["tv_nsec"].isInt64() + ? value["st_mtim"]["tv_nsec"].asInt64() + : 0; } return sta; @@ -120,7 +132,9 @@ set BJsonEntityExtManage::GetExtManage() const set info; for (Json::Value &item : obj_) { - string fileName = item.isMember("fileName") ? item["fileName"].asString() : ""; + string fileName = item.isObject() && item.isMember("fileName") && item["fileName"].isString() + ? item["fileName"].asString() + : ""; info.emplace(fileName); } return info; @@ -139,21 +153,21 @@ map> BJsonEntityExtManage::GetExtManageInfo() map> info; for (const Json::Value &item : obj_) { - string fileName = item.isMember("fileName") ? item["fileName"].asString() : ""; - - if (!item.isMember("information")) { + if (!(item.isObject() && item.isMember("information"))) { continue; } struct stat sta = {}; - string path = item["information"].isMember("path") ? item["information"]["path"].asString() : ""; + string path = item["information"].isMember("path") && item["information"]["path"].isString() + ? item["information"]["path"].asString() + : ""; if (path == BConstants::RESTORE_INSTALL_PATH) { throw BError(BError::Codes::UTILS_INVAL_JSON_ENTITY, "Failed to get ext manage info, invalid path"); } if (item["information"].isMember("stat")) { sta = JsonValue2Stat(item["information"]["stat"]); } - + string fileName = item.isMember("fileName") && item["fileName"].isString() ? item["fileName"].asString() : ""; if (!fileName.empty() && !path.empty()) { info.emplace(fileName, make_pair(path, sta)); } @@ -178,7 +192,9 @@ bool BJsonEntityExtManage::SetHardLinkInfo(const string origin, const set BJsonEntityExtManage::GetHardLinkInfo(const string origin) set hardlinks; for (const Json::Value &item : obj_) { - string fileName = item.isMember("fileName") ? item["fileName"].asString() : ""; - if (origin == fileName) { - if (!(item.isMember("hardlinks") && item["hardlinks"].isArray())) { - break; - } - for (const auto &lk : item["hardlinks"]) { + if (!item.isObject()) { + continue; + } + string fileName = item.isMember("fileName") && item["fileName"].isString() ? item["fileName"].asString() : ""; + if (origin != fileName) { + continue; + } + if (!(item.isMember("hardlinks") && item["hardlinks"].isArray())) { + break; + } + for (const auto &lk : item["hardlinks"]) { + if (lk.isString()) { hardlinks.emplace(lk.asString()); } }