idmap2: create in-memory FRRO before creating file
Re-order the serialization of an FRRO and creation of the backing file. This prevents a dangling (empty) file if the serialization fails. Bug: 189963636 Test: manual: cmd overlay fabricate <bad parameters>, verify no file created in /data/resource-cache Change-Id: I1af88c6d2d1c3a881beecfb50ccaf541a249f39b
This commit is contained in:
committed by
Ryan Mitchell
parent
2db6ff2c70
commit
a384fb7637
@@ -262,17 +262,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());
|
||||
|
||||
Reference in New Issue
Block a user