[Webkit-unassigned] [Bug 227540] [MacOS wk1] crypto/workers/subtle/hrsa-postMessage-worker.html is a flaky failure
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Fri Jul 2 12:50:25 PDT 2021
https://bugs.webkit.org/show_bug.cgi?id=227540
--- Comment #7 from Chris Dumez <cdumez at apple.com> ---
The implementation here is wrong:
bool WorkerGlobalScope::unwrapCryptoKey(const Vector<uint8_t>& wrappedKey, Vector<uint8_t>& key)
{
Ref<WorkerGlobalScope> protectedThis(*this);
auto resultContainer = CryptoBooleanContainer::create();
auto doneContainer = CryptoBooleanContainer::create();
auto keyContainer = CryptoBufferContainer::create();
thread().workerLoaderProxy().postTaskToLoader([resultContainer, wrappedKey, keyContainer, doneContainer, workerMessagingProxy = makeRef(downcast<WorkerMessagingProxy>(thread().workerLoaderProxy()))](ScriptExecutionContext& context) {
resultContainer->setBoolean(context.unwrapCryptoKey(wrappedKey, keyContainer->buffer()));
doneContainer->setBoolean(true);
workerMessagingProxy->postTaskForModeToWorkerOrWorkletGlobalScope([](ScriptExecutionContext& context) {
ASSERT_UNUSED(context, context.isWorkerGlobalScope());
}, WorkerRunLoop::defaultMode());
});
auto waitResult = MessageQueueMessageReceived;
while (!doneContainer->boolean() && waitResult != MessageQueueTerminated)
waitResult = thread().runLoop().runInMode(this, WorkerRunLoop::defaultMode());
if (doneContainer->boolean())
key.swap(keyContainer->buffer());
return resultContainer->boolean();
}
The runInMode() call means we'll process incoming events while we're in the middle of deserializing a crypto key and this is what can cause messages to get received out of order.
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20210702/08f21f6a/attachment-0001.htm>
More information about the webkit-unassigned
mailing list