From 20dea9b5ffce4ffa172d7ed54a3c4df499f3fcb6 Mon Sep 17 00:00:00 2001 From: Igorro Date: Tue, 19 Aug 2025 16:47:31 +0300 Subject: [PATCH] Fix autofill overwriting user data with empty field values (#5649) --- .../autofill/util/AutofillViewExtensions.kt | 45 ++++++++++--------- .../util/AutofillViewExtensionsTest.kt | 20 +++++++++ 2 files changed, 45 insertions(+), 20 deletions(-) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/util/AutofillViewExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/util/AutofillViewExtensions.kt index 1d74dfb7ba..620b52a21b 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/util/AutofillViewExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/autofill/util/AutofillViewExtensions.kt @@ -11,29 +11,34 @@ import com.x8bit.bitwarden.data.autofill.model.FilledItem fun AutofillView.buildFilledItemOrNull( value: String, ): FilledItem? = - when (this.data.autofillType) { - View.AUTOFILL_TYPE_DATE -> { - value - .toLongOrNull() - ?.let { AutofillValue.forDate(it) } - } + // Do not try to autofill fields that are empty in the vault + if (value.isEmpty()) { + null + } else { + when (this.data.autofillType) { + View.AUTOFILL_TYPE_DATE -> { + value + .toLongOrNull() + ?.let { AutofillValue.forDate(it) } + } - View.AUTOFILL_TYPE_LIST -> this.buildListAutofillValueOrNull(value = value) - View.AUTOFILL_TYPE_TEXT -> AutofillValue.forText(value) - View.AUTOFILL_TYPE_TOGGLE -> { - value - .toBooleanStrictOrNull() - ?.let { AutofillValue.forToggle(it) } - } + View.AUTOFILL_TYPE_LIST -> this.buildListAutofillValueOrNull(value = value) + View.AUTOFILL_TYPE_TEXT -> AutofillValue.forText(value) + View.AUTOFILL_TYPE_TOGGLE -> { + value + .toBooleanStrictOrNull() + ?.let { AutofillValue.forToggle(it) } + } - else -> null + else -> null + } + ?.let { autofillValue -> + FilledItem( + autofillId = this.data.autofillId, + value = autofillValue, + ) + } } - ?.let { autofillValue -> - FilledItem( - autofillId = this.data.autofillId, - value = autofillValue, - ) - } /** * Build a list [AutofillValue] out of [value] or return null if not possible. diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/util/AutofillViewExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/util/AutofillViewExtensionsTest.kt index 47fd2b3a71..d375e9d703 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/util/AutofillViewExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/autofill/util/AutofillViewExtensionsTest.kt @@ -329,4 +329,24 @@ class AutofillViewExtensionsTest { // Verify assertNull(actual) } + + @Test + fun `buildFilledItemOrNull should return null when value is empty`() { + // Setup + val value = "" + val autofillViewData = autofillViewData.copy( + autofillType = View.AUTOFILL_TYPE_TEXT, + ) + val autofillView = AutofillView.Login.Username( + data = autofillViewData, + ) + + // Test + val actual = autofillView.buildFilledItemOrNull( + value = value, + ) + + // Verify + assertNull(actual) + } }