From 7625ba919e923ef34855cc3fb1f31bcaf3d021e5 Mon Sep 17 00:00:00 2001 From: Jake McGinty Date: Mon, 23 Nov 2015 17:56:41 -0800 Subject: [PATCH] prevent overwriting external capture URIs Closes #4719 fixes #4538 // FREEBIE --- src/org/thoughtcrime/securesms/ConversationActivity.java | 2 +- .../thoughtcrime/securesms/mms/AttachmentManager.java | 8 ++++---- .../securesms/providers/PersistentBlobProvider.java | 9 ++------- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/src/org/thoughtcrime/securesms/ConversationActivity.java b/src/org/thoughtcrime/securesms/ConversationActivity.java index a30597c448..c7cd075ebc 100644 --- a/src/org/thoughtcrime/securesms/ConversationActivity.java +++ b/src/org/thoughtcrime/securesms/ConversationActivity.java @@ -995,7 +995,7 @@ public class ConversationActivity extends PassphraseRequiredActionBarActivity case AttachmentTypeSelectorAdapter.ADD_CONTACT_INFO: AttachmentManager.selectContactInfo(this, PICK_CONTACT_INFO); break; case AttachmentTypeSelectorAdapter.TAKE_PHOTO: - attachmentManager.capturePhoto(this, recipients, TAKE_PHOTO); break; + attachmentManager.capturePhoto(this, TAKE_PHOTO); break; } } diff --git a/src/org/thoughtcrime/securesms/mms/AttachmentManager.java b/src/org/thoughtcrime/securesms/mms/AttachmentManager.java index d451f83d31..f8f584fd00 100644 --- a/src/org/thoughtcrime/securesms/mms/AttachmentManager.java +++ b/src/org/thoughtcrime/securesms/mms/AttachmentManager.java @@ -126,8 +126,8 @@ public class AttachmentManager { } private void setSlide(@NonNull Slide slide) { - if (getSlideUri() != null) cleanup(getSlideUri()); - if (captureUri != null && slide.getUri() != captureUri) cleanup(captureUri); + if (getSlideUri() != null) cleanup(getSlideUri()); + if (captureUri != null && !captureUri.equals(slide.getUri())) cleanup(captureUri); this.captureUri = null; this.slide = Optional.of(slide); @@ -225,12 +225,12 @@ public class AttachmentManager { return captureUri; } - public void capturePhoto(Activity activity, Recipients recipients, int requestCode) { + public void capturePhoto(Activity activity, int requestCode) { try { Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); if (captureIntent.resolveActivity(activity.getPackageManager()) != null) { if (captureUri == null) { - captureUri = PersistentBlobProvider.getInstance(context).createForExternal(recipients); + captureUri = PersistentBlobProvider.getInstance(context).createForExternal(); } Log.w(TAG, "captureUri path is " + captureUri.getPath()); captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, captureUri); diff --git a/src/org/thoughtcrime/securesms/providers/PersistentBlobProvider.java b/src/org/thoughtcrime/securesms/providers/PersistentBlobProvider.java index 0b0afcc19b..2ee7a3a20c 100644 --- a/src/org/thoughtcrime/securesms/providers/PersistentBlobProvider.java +++ b/src/org/thoughtcrime/securesms/providers/PersistentBlobProvider.java @@ -97,10 +97,9 @@ public class PersistentBlobProvider { }); } - public Uri createForExternal(@NonNull Recipients recipients) throws IOException { - return Uri.fromFile(new File(getExternalDir(context), String.valueOf(generateId(recipients)) + ".jpg")) + public Uri createForExternal() throws IOException { + return Uri.fromFile(new File(getExternalDir(context), String.valueOf(System.currentTimeMillis()) + ".jpg")) .buildUpon() - .appendQueryParameter("unique", String.valueOf(System.currentTimeMillis())) .build(); } @@ -121,10 +120,6 @@ public class PersistentBlobProvider { : new DecryptingPartInputStream(getFile(id), masterSecret); } - private int generateId(Recipients recipients) { - return Math.abs(Arrays.hashCode(recipients.getIds())); - } - private File getFile(long id) { return new File(context.getDir("captures", Context.MODE_PRIVATE), id + ".jpg"); }