Merge changes I6da18cdb,I9de6ba64,I1af88c6d,I154783ff into sc-dev

* changes:
  idmap2: fix cpplint warnings
  OMS: include idmap data in dump
  idmap2: create in-memory FRRO before creating file
  OMS: update shell command --help
This commit is contained in:
Ryan Mitchell
2021-06-03 15:02:22 +00:00
committed by Android (Google) Code Review
22 changed files with 143 additions and 35 deletions

View File

@@ -15,4 +15,4 @@
set noparent
linelength=100
root=..
filter=+build/include_alpha,-runtime/references,-build/c++
filter=+build/include_alpha,-runtime/references,-build/c++,-build/include_alpha

View File

@@ -19,6 +19,7 @@
#include <string>
#include <vector>
#include "idmap2/CommandUtils.h"
#include "idmap2/Idmap.h"
#include "idmap2/Result.h"
#include "idmap2/SysTrace.h"

View File

@@ -14,8 +14,10 @@
* limitations under the License.
*/
#ifndef IDMAP2_IDMAP2_COMMAND_UTILS_H_
#define IDMAP2_IDMAP2_COMMAND_UTILS_H_
#ifndef IDMAP2_IDMAP2_COMMANDUTILS_H_
#define IDMAP2_IDMAP2_COMMANDUTILS_H_
#include <string>
#include "idmap2/PolicyUtils.h"
#include "idmap2/Result.h"
@@ -24,4 +26,4 @@ android::idmap2::Result<android::idmap2::Unit> Verify(
const std::string& idmap_path, const std::string& target_path, const std::string& overlay_path,
const std::string& overlay_name, PolicyBitmask fulfilled_policies, bool enforce_overlayable);
#endif // IDMAP2_IDMAP2_COMMAND_UTILS_H_
#endif // IDMAP2_IDMAP2_COMMANDUTILS_H_

View File

@@ -20,6 +20,7 @@
#include <fstream>
#include <memory>
#include <ostream>
#include <string>
#include <vector>
#include "androidfw/ResourceTypes.h"

View File

@@ -26,6 +26,8 @@
#include <memory>
#include <ostream>
#include <string>
#include <utility>
#include <vector>
#include "android-base/macros.h"
#include "android-base/stringprintf.h"
@@ -33,6 +35,7 @@
#include "idmap2/BinaryStreamVisitor.h"
#include "idmap2/FileUtils.h"
#include "idmap2/Idmap.h"
#include "idmap2/PrettyPrintVisitor.h"
#include "idmap2/Result.h"
#include "idmap2/SysTrace.h"
@@ -45,6 +48,7 @@ using android::idmap2::FabricatedOverlayContainer;
using android::idmap2::Idmap;
using android::idmap2::IdmapHeader;
using android::idmap2::OverlayResourceContainer;
using android::idmap2::PrettyPrintVisitor;
using android::idmap2::TargetResourceContainer;
using android::idmap2::utils::kIdmapCacheDir;
using android::idmap2::utils::kIdmapFilePermissionMask;
@@ -262,17 +266,17 @@ Status Idmap2Service::createFabricatedOverlay(
path.c_str(), uid));
}
const auto frro = builder.Build();
if (!frro) {
return error(StringPrintf("failed to serialize '%s:%s': %s", overlay.packageName.c_str(),
overlay.overlayName.c_str(), frro.GetErrorMessage().c_str()));
}
// Persist the fabricated overlay.
umask(kIdmapFilePermissionMask);
std::ofstream fout(path);
if (fout.fail()) {
return error("failed to open frro path " + path);
}
const auto frro = builder.Build();
if (!frro) {
return error(StringPrintf("failed to serialize '%s:%s': %s", overlay.packageName.c_str(),
overlay.overlayName.c_str(), frro.GetErrorMessage().c_str()));
}
auto result = frro->ToBinaryStream(fout);
if (!result) {
unlink(path.c_str());
@@ -352,4 +356,24 @@ binder::Status Idmap2Service::deleteFabricatedOverlay(const std::string& overlay
return ok();
}
binder::Status Idmap2Service::dumpIdmap(const std::string& overlay_path,
std::string* _aidl_return) {
assert(_aidl_return);
const auto idmap_path = Idmap::CanonicalIdmapPathFor(kIdmapCacheDir, overlay_path);
std::ifstream fin(idmap_path);
const auto idmap = Idmap::FromBinaryStream(fin);
fin.close();
if (!idmap) {
return error(idmap.GetErrorMessage());
}
std::stringstream stream;
PrettyPrintVisitor visitor(stream);
(*idmap)->accept(&visitor);
*_aidl_return = stream.str();
return ok();
}
} // namespace android::os

View File

@@ -24,7 +24,9 @@
#include <idmap2/ResourceContainer.h>
#include <idmap2/Result.h>
#include <memory>
#include <string>
#include <vector>
namespace android::os {
@@ -60,6 +62,8 @@ class Idmap2Service : public BinderService<Idmap2Service>, public BnIdmap2 {
binder::Status getFabricatedOverlayInfos(
std::vector<os::FabricatedOverlayInfo>* _aidl_return) override;
binder::Status dumpIdmap(const std::string& overlay_path, std::string* _aidl_return) override;
private:
// idmap2d is killed after a period of inactivity, so any information stored on this class should
// be able to be recalculated if idmap2 dies and restarts.

View File

@@ -16,8 +16,8 @@
package android.os;
import android.os.FabricatedOverlayInternal;
import android.os.FabricatedOverlayInfo;
import android.os.FabricatedOverlayInternal;
/**
* @hide
@@ -40,4 +40,5 @@ interface IIdmap2 {
@nullable FabricatedOverlayInfo createFabricatedOverlay(in FabricatedOverlayInternal overlay);
List<FabricatedOverlayInfo> getFabricatedOverlayInfos();
boolean deleteFabricatedOverlay(@utf8InCpp String path);
@utf8InCpp String dumpIdmap(@utf8InCpp String overlayApkPath);
}

View File

@@ -14,15 +14,17 @@
* limitations under the License.
*/
#ifndef IDMAP2_INCLUDE_IDMAP2_FABRICATEDOVERLAY_H
#define IDMAP2_INCLUDE_IDMAP2_FABRICATEDOVERLAY_H
#ifndef IDMAP2_INCLUDE_IDMAP2_FABRICATEDOVERLAY_H_
#define IDMAP2_INCLUDE_IDMAP2_FABRICATEDOVERLAY_H_
#include <libidmap2/proto/fabricated_v1.pb.h>
#include <iostream>
#include <map>
#include <memory>
#include <string>
#include <unordered_map>
#include <vector>
#include "idmap2/ResourceContainer.h"
#include "idmap2/Result.h"
@@ -68,7 +70,8 @@ struct FabricatedOverlay {
Result<SerializedData*> InitializeData() const;
Result<uint32_t> GetCrc() const;
FabricatedOverlay(pb::FabricatedOverlay&& overlay, std::optional<uint32_t> crc_from_disk = {});
explicit FabricatedOverlay(pb::FabricatedOverlay&& overlay,
std::optional<uint32_t> crc_from_disk = {});
pb::FabricatedOverlay overlay_pb_;
std::optional<uint32_t> crc_from_disk_;
@@ -102,4 +105,4 @@ struct FabricatedOverlayContainer : public OverlayResourceContainer {
} // namespace android::idmap2
#endif // IDMAP2_INCLUDE_IDMAP2_FABRICATEDOVERLAY_H
#endif // IDMAP2_INCLUDE_IDMAP2_FABRICATEDOVERLAY_H_

View File

@@ -14,9 +14,10 @@
* limitations under the License.
*/
#ifndef IDMAP2_INCLUDE_IDMAP2_RESOURCECONTAINER_H
#define IDMAP2_INCLUDE_IDMAP2_RESOURCECONTAINER_H
#ifndef IDMAP2_INCLUDE_IDMAP2_RESOURCECONTAINER_H_
#define IDMAP2_INCLUDE_IDMAP2_RESOURCECONTAINER_H_
#include <memory>
#include <string>
#include <variant>
#include <vector>
@@ -103,4 +104,4 @@ struct OverlayResourceContainer : public ResourceContainer {
} // namespace android::idmap2
#endif // IDMAP2_INCLUDE_IDMAP2_RESOURCECONTAINER_H
#endif // IDMAP2_INCLUDE_IDMAP2_RESOURCECONTAINER_H_

View File

@@ -23,6 +23,10 @@
#include <zlib.h>
#include <fstream>
#include <map>
#include <memory>
#include <string>
#include <utility>
namespace android::idmap2 {
@@ -89,7 +93,7 @@ Result<FabricatedOverlay> FabricatedOverlay::Builder::Build() {
auto package = entries.find(package_name);
if (package == entries.end()) {
package = entries
.insert(std::make_pair<>(
.insert(std::make_pair(
package_name, std::map<std::string, std::map<std::string, TargetValue>>()))
.first;
}
@@ -98,13 +102,13 @@ Result<FabricatedOverlay> FabricatedOverlay::Builder::Build() {
if (type == package->second.end()) {
type =
package->second
.insert(std::make_pair<>(type_name.to_string(), std::map<std::string, TargetValue>()))
.insert(std::make_pair(type_name.to_string(), std::map<std::string, TargetValue>()))
.first;
}
auto entry = type->second.find(entry_name.to_string());
if (entry == type->second.end()) {
entry = type->second.insert(std::make_pair<>(entry_name.to_string(), TargetValue())).first;
entry = type->second.insert(std::make_pair(entry_name.to_string(), TargetValue())).first;
}
entry->second = TargetValue{res_entry.data_type, res_entry.data_value};
@@ -299,4 +303,4 @@ Result<std::string> FabContainer::GetResourceName(ResourceId /* id */) const {
return Error("Fabricated overlay does not contain resources.");
}
} // namespace android::idmap2
} // namespace android::idmap2

View File

@@ -18,6 +18,7 @@
#include <istream>
#include <string>
#include <utility>
#include "android-base/macros.h"
#include "android-base/stringprintf.h"

View File

@@ -18,6 +18,8 @@
#include <algorithm>
#include <cstdarg>
#include <string>
#include <utility>
#include "android-base/macros.h"
#include "android-base/stringprintf.h"

View File

@@ -16,6 +16,11 @@
#include "idmap2/ResourceContainer.h"
#include <memory>
#include <string>
#include <utility>
#include <vector>
#include "androidfw/ApkAssets.h"
#include "androidfw/AssetManager.h"
#include "androidfw/Util.h"
@@ -445,4 +450,4 @@ Result<std::unique_ptr<OverlayResourceContainer>> OverlayResourceContainer::From
return std::unique_ptr<OverlayResourceContainer>(result->release());
}
} // namespace android::idmap2
} // namespace android::idmap2

View File

@@ -17,6 +17,7 @@
#include "idmap2/ResourceUtils.h"
#include <memory>
#include <string>
#include "androidfw/StringPiece.h"
#include "androidfw/Util.h"

View File

@@ -19,6 +19,7 @@
#include <idmap2/FabricatedOverlay.h>
#include <fstream>
#include <utility>
namespace android::idmap2 {
@@ -135,4 +136,4 @@ TEST(FabricatedOverlayTests, SerializeAndDeserialize) {
EXPECT_EQ(Res_value::TYPE_INT_DEC, entry->data_type);
}
} // namespace android::idmap2
} // namespace android::idmap2

View File

@@ -83,7 +83,7 @@ TEST(IdmapTests, IdmapFailParsingDifferentVersion) {
std::stringstream stream;
stream << android::kIdmapMagic;
stream << 0xffffffffU;
stream << std::string(kJunkSize, (char)0xffU);
stream << std::string(kJunkSize, static_cast<char>(0xffU));
ASSERT_FALSE(Idmap::FromBinaryStream(stream));
}
@@ -92,7 +92,7 @@ TEST(IdmapTests, IdmapFailParsingDifferentMagic) {
std::stringstream stream;
stream << 0xffffffffU;
stream << android::kIdmapCurrentVersion;
stream << std::string(kJunkSize, (char)0xffU);
stream << std::string(kJunkSize, static_cast<char>(0xffU));
ASSERT_FALSE(Idmap::FromBinaryStream(stream));
}

View File

@@ -66,8 +66,8 @@ namespace R::overlay {
constexpr ResourceId str1 = 0x7f02000b;
constexpr ResourceId str3 = 0x7f02000c;
constexpr ResourceId str4 = 0x7f02000d;
}
}
} // namespace string
} // namespace R::overlay
// clang-format on
} // namespace android::idmap2