(fingerprint): guard against out-of-bounds access in getVendorString()

Add null and bounds checks to prevent crashes when accessing the
fingerprint_acquired_vendor string array. This ensures safe fallback
behavior and logs appropriate error messages when the index is invalid.

Also improves stability during enrollment help handling on Google devices.

05-23 22:59:15.144 11647 11647 E AndroidRuntime: FATAL EXCEPTION: main
05-23 22:59:15.144 11647 11647 E AndroidRuntime: Process: com.android.settings, PID: 11647
05-23 22:59:15.144 11647 11647 E AndroidRuntime: java.lang.IllegalArgumentException: vendor string index is out of range of [0, -1] (too high)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at com.android.settings.biometrics.fingerprint.feature.SfpsEnrollmentFeatureImpl.getVendorString(go/retraceme bb4a03fdc34cff7f722829db90aff515e0ae20b72b33e5004f74889672317151:33)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at com.android.settings.biometrics.fingerprint.feature.SfpsEnrollmentFeatureImpl.getFeaturedVendorString(go/retraceme bb4a03fdc34cff7f722829db90aff515e0ae20b72b33e5004f74889672317151:48)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at com.android.settings.biometrics.fingerprint.FingerprintEnrollEnrolling.onEnrollmentHelp(go/retraceme bb4a03fdc34cff7f722829db90aff515e0ae20b72b33e5004f74889672317151:7)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at com.android.settings.biometrics.BiometricEnrollSidecar.onEnrollmentHelp(go/retraceme bb4a03fdc34cff7f722829db90aff515e0ae20b72b33e5004f74889672317151:5)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at com.android.settings.biometrics.fingerprint.FingerprintEnrollSidecar.access$201(go/retraceme bb4a03fdc34cff7f722829db90aff515e0ae20b72b33e5004f74889672317151:1)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at com.android.settings.biometrics.fingerprint.FingerprintEnrollSidecar$1.onEnrollmentHelp(go/retraceme bb4a03fdc34cff7f722829db90aff515e0ae20b72b33e5004f74889672317151:3)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at com.android.settings.biometrics.fingerprint.FingerprintUpdater$NotifyingEnrollmentCallback.onEnrollmentHelp(go/retraceme bb4a03fdc34cff7f722829db90aff515e0ae20b72b33e5004f74889672317151:3)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at android.hardware.fingerprint.FingerprintCallback.sendAcquiredResult(FingerprintCallback.java:199)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at android.hardware.fingerprint.FingerprintManager$FingerprintServiceReceiver.lambda$onAcquired$1(FingerprintManager.java:1572)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at android.hardware.fingerprint.FingerprintManager$FingerprintServiceReceiver.$r8$lambda$wcZms5DTCBGW5VTEeJRCWEIwTW4(Unknown Source:0)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at android.hardware.fingerprint.FingerprintManager$FingerprintServiceReceiver$$ExternalSyntheticLambda10.run(D8$$SyntheticClass:0)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:991)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:102)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at android.os.Looper.loopOnce(Looper.java:232)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:317)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:8930)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:595)
05-23 22:59:15.144 11647 11647 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:911)
This commit is contained in:
Oscar
2025-05-24 20:16:19 -07:00
committed by Joey
parent 58b0657a69
commit ddf47ebe6c
2 changed files with 11 additions and 2 deletions

View File

@@ -1647,6 +1647,8 @@
<!-- Packages that will not show Display over other apps permission -->
<string-array name="display_over_apps_permission_change_exempt">
</string-array>
<string-array name="fingerprint_acquired_vendor" />
<string-array name="fingerprint_acquired_vendor">
<item>Fingerprint is immobile</item>
</string-array>
</resources>

View File

@@ -200,7 +200,14 @@ public class SfpsEnrollmentFeatureImpl implements SfpsEnrollmentFeature {
private static String getVendorString(Context ctx, int index) {
String[] strings = ctx.getResources().getStringArray(R.array.fingerprint_acquired_vendor);
Preconditions.checkArgumentInRange(index, 0, strings.length - 1, "vendor string index");
if (strings == null || strings.length == 0) {
Log.e(TAG, "Vendor string array is null or empty");
return "";
}
if (index < 0 || index >= strings.length) {
Log.e(TAG, "vendor string index is out of range: " + index + " (size: " + strings.length + ")");
return "";
}
return strings[index];
}