Previously, we called destroy() to delete the temp file on failure only when catching an IOException, not a RuntimeException. Use a slightly different construction with a finally block to ensure it's always deleted on error (assuming the JVM is still healthy enough). Change-Id: Ie201f3cfc81099ee1cafed066632da76223cef1ftags/v5.3.0.201903061415-rc1
@@ -1024,13 +1024,16 @@ public class ResolveMerger extends ThreeWayMerger { | |||
throws IOException { | |||
TemporaryBuffer.LocalFile buf = new TemporaryBuffer.LocalFile( | |||
db != null ? nonNullRepo().getDirectory() : null, inCoreLimit); | |||
boolean success = false; | |||
try { | |||
new MergeFormatter().formatMerge(buf, result, | |||
Arrays.asList(commitNames), UTF_8); | |||
buf.close(); | |||
} catch (IOException e) { | |||
buf.destroy(); | |||
throw e; | |||
success = true; | |||
} finally { | |||
if (!success) { | |||
buf.destroy(); | |||
} | |||
} | |||
return buf; | |||
} |