diff options
| author | 2021-04-09 14:29:59 -0700 | |
|---|---|---|
| committer | 2021-04-09 14:36:34 -0700 | |
| commit | 2dd8bdc64501be87f0b0f6abb956ffdfd95fc819 (patch) | |
| tree | dcde74155172e0141802eb39bda472f9f6eaaaaa | |
| parent | 4a50c4e8470fa7677731c1ddb4839f4009ee3d44 (diff) | |
Close files in FontManagerShellCommand.
Bug: 184975511
Test: run `cmd font update` and check `lsof -p $(pidof system_server)`.
Change-Id: I93ae35b808631b190a8c361e9480ee8f995f769a
| -rw-r--r-- | services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java b/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java index cf9a79f69f19..5457ef2c77a9 100644 --- a/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java +++ b/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java @@ -317,40 +317,45 @@ public class FontManagerShellCommand extends ShellCommand { "Signature file argument is required."); } - // TODO: close fontFd and sigFd. - ParcelFileDescriptor fontFd = shell.openFileForSystem(fontPath, "r"); - if (fontFd == null) { - throw new SystemFontException( - FontManager.RESULT_ERROR_FAILED_TO_OPEN_FONT_FILE, - "Failed to open font file"); - } - - ParcelFileDescriptor sigFd = shell.openFileForSystem(signaturePath, "r"); - if (sigFd == null) { - throw new SystemFontException( - FontManager.RESULT_ERROR_FAILED_TO_OPEN_SIGNATURE_FILE, - "Failed to open signature file"); - } + try (ParcelFileDescriptor fontFd = shell.openFileForSystem(fontPath, "r"); + ParcelFileDescriptor sigFd = shell.openFileForSystem(signaturePath, "r")) { + if (fontFd == null) { + throw new SystemFontException( + FontManager.RESULT_ERROR_FAILED_TO_OPEN_FONT_FILE, + "Failed to open font file"); + } - try (FileInputStream sigFis = new FileInputStream(sigFd.getFileDescriptor())) { - int len = sigFis.available(); - if (len > MAX_SIGNATURE_FILE_SIZE_BYTES) { + if (sigFd == null) { throw new SystemFontException( - FontManager.RESULT_ERROR_SIGNATURE_TOO_LARGE, - "Signature file is too large"); + FontManager.RESULT_ERROR_FAILED_TO_OPEN_SIGNATURE_FILE, + "Failed to open signature file"); } - byte[] signature = new byte[len]; - if (sigFis.read(signature, 0, len) != len) { + + byte[] signature; + try (FileInputStream sigFis = new FileInputStream(sigFd.getFileDescriptor())) { + int len = sigFis.available(); + if (len > MAX_SIGNATURE_FILE_SIZE_BYTES) { + throw new SystemFontException( + FontManager.RESULT_ERROR_SIGNATURE_TOO_LARGE, + "Signature file is too large"); + } + signature = new byte[len]; + if (sigFis.read(signature, 0, len) != len) { + throw new SystemFontException( + FontManager.RESULT_ERROR_INVALID_SIGNATURE_FILE, + "Invalid read length"); + } + } catch (IOException e) { throw new SystemFontException( FontManager.RESULT_ERROR_INVALID_SIGNATURE_FILE, - "Invalid read length"); + "Failed to read signature file.", e); } mService.update( -1, Collections.singletonList(new FontUpdateRequest(fontFd, signature))); } catch (IOException e) { - throw new SystemFontException( - FontManager.RESULT_ERROR_INVALID_SIGNATURE_FILE, - "Failed to read signature file.", e); + // We should reach here only when close() threw IOException. + // shell.openFileForSystem() and FontManagerService.update() don't throw IOException. + Slog.w(TAG, "Error while closing files", e); } shell.getOutPrintWriter().println("Success"); // TODO: Output more details. |