Bug 1941994 - avoid deadlock in WinWebAuthnService GetAutoFillEntries. r=keeler
Differential Revision: https://phabricator.services.mozilla.com/D235082
This commit is contained in:
@@ -971,10 +971,16 @@ WinWebAuthnService::HasPendingConditionalGet(uint64_t aBrowsingContextId,
|
||||
NS_IMETHODIMP
|
||||
WinWebAuthnService::GetAutoFillEntries(
|
||||
uint64_t aTransactionId, nsTArray<RefPtr<nsIWebAuthnAutoFillEntry>>& aRv) {
|
||||
auto guard = mTransactionState.Lock();
|
||||
if (guard->isNothing() || guard->ref().transactionId != aTransactionId ||
|
||||
guard->ref().pendingSignArgs.isNothing()) {
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
aRv.Clear();
|
||||
nsString rpId;
|
||||
|
||||
{
|
||||
auto guard = mTransactionState.Lock();
|
||||
if (guard->isNothing() || guard->ref().transactionId != aTransactionId ||
|
||||
guard->ref().pendingSignArgs.isNothing()) {
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
Unused << guard->ref().pendingSignArgs.ref()->GetRpId(rpId);
|
||||
}
|
||||
|
||||
StaticAutoReadLock moduleLock(gWinWebAuthnModuleLock);
|
||||
@@ -982,8 +988,6 @@ WinWebAuthnService::GetAutoFillEntries(
|
||||
return NS_ERROR_NOT_AVAILABLE;
|
||||
}
|
||||
|
||||
aRv.Clear();
|
||||
|
||||
if (gWinWebauthnGetApiVersionNumber() < WEBAUTHN_API_VERSION_4) {
|
||||
// GetPlatformCredentialList was added in version 4. Earlier versions
|
||||
// can still present a generic "Use a Passkey" autofill entry, so
|
||||
@@ -991,9 +995,6 @@ WinWebAuthnService::GetAutoFillEntries(
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsString rpId;
|
||||
Unused << guard->ref().pendingSignArgs.ref()->GetRpId(rpId);
|
||||
|
||||
WEBAUTHN_GET_CREDENTIALS_OPTIONS getCredentialsOptions{
|
||||
WEBAUTHN_GET_CREDENTIALS_OPTIONS_VERSION_1,
|
||||
rpId.get(), // pwszRpId
|
||||
|
||||
Reference in New Issue
Block a user