From a36903d23fd90ffd2d6fac0fbe81c36857b6469a Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 14 May 2024 11:28:18 +0200 Subject: [PATCH] catch IAE as thrown by termux --- .../persistance/FileBackend.java | 52 ++++++++++--------- 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index eea7486ab40e369b01d70aa29fb6b1b16d662522..4fe2494f66b55544ea55f8211f1387cc12e48e39 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -36,6 +36,20 @@ import com.google.common.base.Strings; import com.google.common.collect.ImmutableList; import com.google.common.io.ByteStreams; +import eu.siacs.conversations.Config; +import eu.siacs.conversations.R; +import eu.siacs.conversations.entities.DownloadableFile; +import eu.siacs.conversations.entities.Message; +import eu.siacs.conversations.services.AttachFileToConversationRunnable; +import eu.siacs.conversations.services.XmppConnectionService; +import eu.siacs.conversations.ui.adapter.MediaAdapter; +import eu.siacs.conversations.ui.util.Attachment; +import eu.siacs.conversations.utils.CryptoHelper; +import eu.siacs.conversations.utils.FileUtils; +import eu.siacs.conversations.utils.FileWriterException; +import eu.siacs.conversations.utils.MimeUtils; +import eu.siacs.conversations.xmpp.pep.Avatar; + import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.File; @@ -58,20 +72,6 @@ import java.util.List; import java.util.Locale; import java.util.UUID; -import eu.siacs.conversations.Config; -import eu.siacs.conversations.R; -import eu.siacs.conversations.entities.DownloadableFile; -import eu.siacs.conversations.entities.Message; -import eu.siacs.conversations.services.AttachFileToConversationRunnable; -import eu.siacs.conversations.services.XmppConnectionService; -import eu.siacs.conversations.ui.adapter.MediaAdapter; -import eu.siacs.conversations.ui.util.Attachment; -import eu.siacs.conversations.utils.CryptoHelper; -import eu.siacs.conversations.utils.FileUtils; -import eu.siacs.conversations.utils.FileWriterException; -import eu.siacs.conversations.utils.MimeUtils; -import eu.siacs.conversations.xmpp.pep.Avatar; - public class FileBackend { private static final Object THUMBNAIL_LOCK = new Object(); @@ -664,13 +664,17 @@ public class FileBackend { } private void copyFileToPrivateStorage(File file, Uri uri) throws FileCopyException { - Log.d( - Config.LOGTAG, - "copy file (" + uri.toString() + ") to private storage " + file.getAbsolutePath()); - file.getParentFile().mkdirs(); + final var parentDirectory = file.getParentFile(); + if (parentDirectory != null && parentDirectory.mkdirs()) { + Log.d(Config.LOGTAG,"created directory "+parentDirectory.getAbsolutePath()); + } try { - file.createNewFile(); - } catch (IOException e) { + if (file.createNewFile()) { + Log.d( + Config.LOGTAG, + "copy file (" + uri.toString() + ") to private storage " + file.getAbsolutePath()); + } + } catch (final IOException e) { throw new FileCopyException(R.string.error_unable_to_create_temporary_file); } try (final OutputStream os = new FileOutputStream(file); @@ -681,12 +685,12 @@ public class FileBackend { } try { ByteStreams.copy(is, os); - } catch (IOException e) { + } catch (final IOException e) { throw new FileWriterException(file); } try { os.flush(); - } catch (IOException e) { + } catch (final IOException e) { throw new FileWriterException(file); } } catch (final FileNotFoundException e) { @@ -695,7 +699,7 @@ public class FileBackend { } catch (final FileWriterException e) { cleanup(file); throw new FileCopyException(R.string.error_unable_to_create_temporary_file); - } catch (final SecurityException | IllegalStateException e) { + } catch (final SecurityException | IllegalStateException | IllegalArgumentException e) { cleanup(file); throw new FileCopyException(R.string.error_security_exception); } catch (final IOException e) { @@ -706,7 +710,7 @@ public class FileBackend { public void copyFileToPrivateStorage(Message message, Uri uri, String type) throws FileCopyException { - String mime = MimeUtils.guessMimeTypeFromUriAndMime(mXmppConnectionService, uri, type); + final String mime = MimeUtils.guessMimeTypeFromUriAndMime(mXmppConnectionService, uri, type); Log.d(Config.LOGTAG, "copy " + uri.toString() + " to private storage (mime=" + mime + ")"); String extension = MimeUtils.guessExtensionFromMimeType(mime); if (extension == null) {