diff options
| -rw-r--r-- | services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java | 18 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java | 5 |
2 files changed, 23 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java b/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java index 8ec72770d782..720105d29836 100644 --- a/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java +++ b/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java @@ -23,6 +23,8 @@ import android.annotation.Nullable; import android.graphics.fonts.FontManager; import android.graphics.fonts.SystemFonts; import android.os.FileUtils; +import android.system.ErrnoException; +import android.system.Os; import android.text.FontConfig; import android.util.Base64; import android.util.Slog; @@ -223,6 +225,14 @@ final class UpdatableFontDir { FontManager.ERROR_CODE_FAILED_TO_WRITE_FONT_FILE, "Failed to create font directory."); } + try { + // Make newDir executable so that apps can access font file inside newDir. + Os.chmod(newDir.getAbsolutePath(), 0711); + } catch (ErrnoException e) { + throw new SystemFontException( + FontManager.ERROR_CODE_FAILED_TO_WRITE_FONT_FILE, + "Failed to change mode to 711", e); + } boolean success = false; try { File tempNewFontFile = new File(newDir, "font.ttf"); @@ -262,6 +272,14 @@ final class UpdatableFontDir { FontManager.ERROR_CODE_FAILED_TO_WRITE_FONT_FILE, "Failed to move verified font file."); } + try { + // Make the font file readable by apps. + Os.chmod(newFontFile.getAbsolutePath(), 0644); + } catch (ErrnoException e) { + throw new SystemFontException( + FontManager.ERROR_CODE_FAILED_TO_WRITE_FONT_FILE, + "Failed to change mode to 711", e); + } FontFileInfo fontFileInfo = validateFontFile(newFontFile); // Write config file. diff --git a/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java b/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java index 0e872d96bd85..f437d1f214ea 100644 --- a/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java +++ b/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java @@ -25,6 +25,7 @@ import android.content.Context; import android.graphics.fonts.FontManager; import android.os.FileUtils; import android.platform.test.annotations.Presubmit; +import android.system.Os; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; @@ -281,6 +282,10 @@ public final class UpdatableFontDirTest { installFontFile(dir, "test,1", GOOD_SIGNATURE); assertThat(dir.getFontFileMap()).containsKey("test.ttf"); assertThat(parser.getRevision(dir.getFontFileMap().get("test.ttf"))).isEqualTo(1); + File fontFile = dir.getFontFileMap().get("test.ttf"); + assertThat(Os.stat(fontFile.getAbsolutePath()).st_mode & 0777).isEqualTo(0644); + File fontDir = fontFile.getParentFile(); + assertThat(Os.stat(fontDir.getAbsolutePath()).st_mode & 0777).isEqualTo(0711); } @Test |