From a5083c40d513184bc84ac39def7303a1424fa4c8 Mon Sep 17 00:00:00 2001 From: Felipe Leme Date: Tue, 8 Aug 2017 12:39:04 -0700 Subject: [PATCH] CharSequenceTransformation should not change anything when comparision fails. Test: cts-tradefed run commandAndExit cts-dev -m CtsAutoFillServiceTestCases -t android.autofillservice.cts.CharSequenceTransformationTest#testMismatch Test: cts-tradefed run commandAndExit cts-dev -m CtsAutoFillServiceTestCases Fixes: 64482785 Change-Id: Ia6036e0a1c6f5f084e6b13c7bdd3a9e24be7ac1a --- .../service/autofill/CharSequenceTransformation.java | 11 +++++++++-- .../android/service/autofill/ImageTransformation.java | 3 +-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/core/java/android/service/autofill/CharSequenceTransformation.java b/core/java/android/service/autofill/CharSequenceTransformation.java index dfb30b9a38c4f..8ab856e686fb9 100644 --- a/core/java/android/service/autofill/CharSequenceTransformation.java +++ b/core/java/android/service/autofill/CharSequenceTransformation.java @@ -31,6 +31,7 @@ import android.widget.TextView; import com.android.internal.util.Preconditions; +import java.util.regex.Matcher; import java.util.regex.Pattern; /** @@ -53,7 +54,8 @@ import java.util.regex.Pattern; * fields (month and year) would be: * *
- * new CharSequenceTransformation.Builder(ccExpMonthId, Pattern.compile("^(\\d\\d)$"), "Exp: $1")
+ * new CharSequenceTransformation
+ *   .Builder(ccExpMonthId, Pattern.compile("^(\\d\\d)$"), "Exp: $1")
  *   .addField(ccExpYearId, Pattern.compile("^(\\d\\d\\d\\d)$"), " / $1");
  * 
*/ @@ -83,8 +85,13 @@ public final class CharSequenceTransformation extends InternalTransformation imp return; } try { + final Matcher matcher = field.first.matcher(value); + if (!matcher.matches()) { + if (sDebug) Log.d(TAG, "match for " + field.first + " failed on id " + id); + return; + } // replaceAll throws an exception if the subst is invalid - final String convertedValue = field.first.matcher(value).replaceAll(field.second); + final String convertedValue = matcher.replaceAll(field.second); converted.append(convertedValue); } catch (Exception e) { // Do not log full exception to avoid PII leaking diff --git a/core/java/android/service/autofill/ImageTransformation.java b/core/java/android/service/autofill/ImageTransformation.java index 36271897b97ce..2151f74fbe5b2 100644 --- a/core/java/android/service/autofill/ImageTransformation.java +++ b/core/java/android/service/autofill/ImageTransformation.java @@ -78,8 +78,7 @@ public final class ImageTransformation extends InternalTransformation implements } final int size = mOptions.size(); if (sDebug) { - Log.d(TAG, size + " multiple options on id " + childViewId + " to compare against " - + value); + Log.d(TAG, size + " multiple options on id " + childViewId + " to compare against"); } for (int i = 0; i < size; i++) {