Fix race condition in checkPattern and verifyPattern.

am: 9475460e66

Change-Id: I88a9304c1f7d23b70cb23988112fc6c34db51338
This commit is contained in:
Nancy Zheng
2016-10-07 18:00:24 +00:00
committed by android-build-merger

View File

@@ -4,6 +4,7 @@ import android.os.AsyncTask;
import com.android.internal.widget.LockPatternUtils.RequestThrottledException;
import java.util.ArrayList;
import java.util.List;
/**
@@ -61,11 +62,19 @@ public final class LockPatternChecker {
final OnVerifyCallback callback) {
AsyncTask<Void, Void, byte[]> task = new AsyncTask<Void, Void, byte[]>() {
private int mThrottleTimeout;
private List<LockPatternView.Cell> patternCopy;
@Override
protected void onPreExecute() {
// Make a copy of the pattern to prevent race conditions.
// No need to clone the individual cells because they are immutable.
patternCopy = new ArrayList(pattern);
}
@Override
protected byte[] doInBackground(Void... args) {
try {
return utils.verifyPattern(pattern, challenge, userId);
return utils.verifyPattern(patternCopy, challenge, userId);
} catch (RequestThrottledException ex) {
mThrottleTimeout = ex.getTimeoutMs();
return null;
@@ -95,11 +104,19 @@ public final class LockPatternChecker {
final OnCheckCallback callback) {
AsyncTask<Void, Void, Boolean> task = new AsyncTask<Void, Void, Boolean>() {
private int mThrottleTimeout;
private List<LockPatternView.Cell> patternCopy;
@Override
protected void onPreExecute() {
// Make a copy of the pattern to prevent race conditions.
// No need to clone the individual cells because they are immutable.
patternCopy = new ArrayList(pattern);
}
@Override
protected Boolean doInBackground(Void... args) {
try {
return utils.checkPattern(pattern, userId, callback::onEarlyMatched);
return utils.checkPattern(patternCopy, userId, callback::onEarlyMatched);
} catch (RequestThrottledException ex) {
mThrottleTimeout = ex.getTimeoutMs();
return false;