catch IAE as thrown by termux

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/persistance/FileBackend.java | 52 
1 file changed, 28 insertions(+), 24 deletions(-)

Detailed changes

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) {