Skip to content

Commit 5644d5b

Browse files
Pedro Varangotrniwa
authored andcommitted
NetworkStorageManager.GetAllDatabaseNamesAndVersions crashes with invalid requestIdentifier
rdar://149291737 https://bugs.webkit.org/show_bug.cgi?id=291649 Reviewed by Sihui Liu. This fixes the bug by checking if the requestIdentifier is valid * LayoutTests/ipc/getAllDatabaseNamesAndVersions-no-resource-identifier-expected.txt: Added. * LayoutTests/ipc/getAllDatabaseNamesAndVersions-no-resource-identifier.html: Added. * Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp: (WebKit::NetworkStorageManager::getAllDatabaseNamesAndVersions): Canonical link: https://commits.webkit.org/293790@main
1 parent 7526514 commit 5644d5b

File tree

3 files changed

+58
-0
lines changed

3 files changed

+58
-0
lines changed
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
This test passes if webkit does not crash
2+
3+
PASS
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
<!DOCTYPE html><!-- webkit-test-runner [ IPCTestingAPIEnabled=true ] -->
2+
<script>
3+
window.testRunner?.waitUntilDone();
4+
window.testRunner?.dumpAsText();
5+
6+
function test() {
7+
var pass = document.getElementById('pass');
8+
if (window.IPC) {
9+
import('./coreipc.js').then(({
10+
CoreIPC
11+
}) => {
12+
CoreIPC.Networking.NetworkStorageManager.GetAllDatabaseNamesAndVersions(0, {
13+
requestIdentifier: {
14+
m_idbConnectionIdentifier: {},
15+
m_resourceNumber: {
16+
optionalValue: 1234
17+
}
18+
},
19+
origin: {
20+
topOrigin: {
21+
data: {
22+
variantType: 'WebCore::SecurityOriginData::Tuple',
23+
variant: {
24+
protocol: '',
25+
host: '',
26+
port: {}
27+
}
28+
}
29+
},
30+
clientOrigin: {
31+
data: {
32+
variantType: 'WebCore::SecurityOriginData::Tuple',
33+
variant: {
34+
protocol: '',
35+
host: '',
36+
port: {}
37+
}
38+
}
39+
}
40+
}
41+
});
42+
pass.innerText = "PASS";
43+
window.testRunner?.notifyDone();
44+
});
45+
} else {
46+
pass.innerText = "PASS";
47+
window.testRunner?.notifyDone();
48+
}
49+
}
50+
</script>
51+
<body onload="test()">
52+
<p>This test passes if webkit does not crash</p>
53+
<div id="pass"></div>
54+
</body>

Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1935,6 +1935,7 @@ void NetworkStorageManager::iterateCursor(const WebCore::IDBRequestData& request
19351935

19361936
void NetworkStorageManager::getAllDatabaseNamesAndVersions(IPC::Connection& connection, const WebCore::IDBResourceIdentifier& requestIdentifier, const WebCore::ClientOrigin& origin)
19371937
{
1938+
MESSAGE_CHECK(requestIdentifier.connectionIdentifier(), connection);
19381939
Ref connectionToClient = m_idbStorageRegistry->ensureConnectionToClient(connection.uniqueID(), *requestIdentifier.connectionIdentifier());
19391940
auto result = checkedOriginStorageManager(origin)->idbStorageManager(*m_idbStorageRegistry).getAllDatabaseNamesAndVersions();
19401941
connectionToClient->didGetAllDatabaseNamesAndVersions(requestIdentifier, WTFMove(result));

0 commit comments

Comments
 (0)