diff --git a/core/java/android/os/FileUtils.java b/core/java/android/os/FileUtils.java index 44ae6eee21d63..760df45d2b698 100644 --- a/core/java/android/os/FileUtils.java +++ b/core/java/android/os/FileUtils.java @@ -316,6 +316,16 @@ public class FileUtils { stringToFile(file.getAbsolutePath(), string); } + /* + * Writes the bytes given in {@code content} to the file whose absolute path + * is {@code filename}. + */ + public static void bytesToFile(String filename, byte[] content) throws IOException { + try (FileOutputStream fos = new FileOutputStream(filename)) { + fos.write(content); + } + } + /** * Writes string to file. Basically same as "echo -n $string > $filename" * diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index eef8ce22ab48b..e3305850433b7 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -2470,7 +2470,10 @@ final class Settings { final File file = new File(dir, "appid"); try { - FileUtils.stringToFile(file, Integer.toString(ps.appId)); + // Note that the use of US_ASCII here is safe, we're only writing a decimal + // number to the file. + FileUtils.bytesToFile(file.getAbsolutePath(), + Integer.toString(ps.appId).getBytes(StandardCharsets.US_ASCII)); mKernelMapping.put(ps.name, ps.appId); } catch (IOException ignored) { }