From a384fb763717ac0b841605b0b16b23784c09fc90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?M=C3=A5rten=20Kongstad?= Date: Mon, 10 May 2021 08:34:54 +0000 Subject: [PATCH] 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 , verify no file created in /data/resource-cache Change-Id: I1af88c6d2d1c3a881beecfb50ccaf541a249f39b --- cmds/idmap2/idmap2d/Idmap2Service.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/cmds/idmap2/idmap2d/Idmap2Service.cpp b/cmds/idmap2/idmap2d/Idmap2Service.cpp index 05336baf9217f..4f775aa521957 100644 --- a/cmds/idmap2/idmap2d/Idmap2Service.cpp +++ b/cmds/idmap2/idmap2d/Idmap2Service.cpp @@ -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());