Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/bitfireAT/vcard4android.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRicki Hirner <hirner@bitfire.at>2022-03-19 20:20:45 +0300
committerRicki Hirner <hirner@bitfire.at>2022-03-19 20:28:10 +0300
commit1af1eba9d22f777b5c3a8fa047ab1df8772d5f18 (patch)
tree86b03e4be807de0f4b5c6aa20ec0f701b8e024c0
parentf1b5c5a3bcc1ba6eb357727092a7cfe049b68b6d (diff)
Contact photos: ignore invalid photos; don't require memory for validating images
-rw-r--r--src/main/java/at/bitfire/vcard4android/AndroidContact.kt7
-rw-r--r--src/main/java/at/bitfire/vcard4android/contactrow/PhotoBuilder.kt8
2 files changed, 12 insertions, 3 deletions
diff --git a/src/main/java/at/bitfire/vcard4android/AndroidContact.kt b/src/main/java/at/bitfire/vcard4android/AndroidContact.kt
index 31556e5..abdc244 100644
--- a/src/main/java/at/bitfire/vcard4android/AndroidContact.kt
+++ b/src/main/java/at/bitfire/vcard4android/AndroidContact.kt
@@ -18,6 +18,7 @@ import at.bitfire.vcard4android.contactrow.ContactProcessor
import at.bitfire.vcard4android.contactrow.PhotoBuilder
import org.apache.commons.lang3.builder.ToStringBuilder
import java.io.FileNotFoundException
+import java.util.logging.Level
open class AndroidContact(
open val addressBook: AndroidAddressBook<out AndroidContact, out AndroidGroup>
@@ -127,7 +128,11 @@ open class AndroidContact(
id = ContentUris.parseId(resultUri)
getContact().photo?.let { photo ->
- PhotoBuilder.insertPhoto(provider, addressBook.account, id!!, photo)
+ try {
+ PhotoBuilder.insertPhoto(provider, addressBook.account, id!!, photo)
+ } catch (e: IllegalArgumentException) {
+ Constants.log.log(Level.WARNING, "Invalid contact photo", e)
+ }
}
return resultUri
diff --git a/src/main/java/at/bitfire/vcard4android/contactrow/PhotoBuilder.kt b/src/main/java/at/bitfire/vcard4android/contactrow/PhotoBuilder.kt
index f91f80e..6eeb7e5 100644
--- a/src/main/java/at/bitfire/vcard4android/contactrow/PhotoBuilder.kt
+++ b/src/main/java/at/bitfire/vcard4android/contactrow/PhotoBuilder.kt
@@ -39,13 +39,17 @@ class PhotoBuilder(dataRowUri: Uri, rawContactId: Long?, contact: Contact)
*
* @return URI of the raw contact display photo ([Photo.PHOTO_URI])
*
+ * @throws IllegalArgumentException when the image can't be read by [BitmapFactory]
* @throws ContactsStorageException when the image couldn't be written
*/
fun insertPhoto(provider: ContentProviderClient, account: Account, rawContactId: Long, data: ByteArray): Uri? {
// verify that data can be decoded by BitmapFactory, so that the contacts provider can process it
- val valid = BitmapFactory.decodeByteArray(data, 0, data.size) != null
+ val opts = BitmapFactory.Options()
+ opts.inJustDecodeBounds = true
+ BitmapFactory.decodeByteArray(data, 0, data.size, opts)
+ val valid = opts.outHeight != -1 && opts.outWidth != -1
if (!valid)
- throw IllegalArgumentException("Image can't be decoded")
+ throw IllegalArgumentException("BitmapFactory can't decode image")
// write file to contacts provider
val uri = RawContacts.CONTENT_URI.buildUpon()