| <!DOCTYPE html><!-- webkit-test-runner [ IPCTestingAPIEnabled=true ] --> | |
| <body> | |
| <p>To avoid potential UAF in multi-threaded context, this test verifies that SetLogIdentifier requires an integer parameter and rejects strings at serialization.</p> | |
| </body> | |
| <script> | |
| window.testRunner?.dumpAsText(); | |
| window.testRunner?.waitUntilDone(); | |
| if (window.IPC) { | |
| import('./coreipc.js').then(({ | |
| CoreIPC | |
| }) => { | |
| // Generate unique identifier to avoid collisions | |
| const identifier = Date.now() + Math.floor(Math.random() * 1000); | |
| CoreIPC.GPU.RemoteSampleBufferDisplayLayerManager.CreateLayer(0, { | |
| id: identifier, | |
| hideRootLayer: false, | |
| size: { | |
| width: 100, | |
| height: 100 | |
| }, | |
| shouldMaintainAspectRatio: false, | |
| canShowWhileLocked: true | |
| }, (r) => { | |
| try { | |
| // Test 1: SetLogIdentifier should accept integers | |
| CoreIPC.GPU.RemoteSampleBufferDisplayLayer.SetLogIdentifier(identifier, { | |
| logIdentifier: 12345 | |
| }); | |
| const pass1 = document.createElement('p'); | |
| pass1.textContent = 'PASS: SetLogIdentifier accepts integer'; | |
| document.body.appendChild(pass1); | |
| // Test 2: SetLogIdentifier should reject strings with SerializationError | |
| try { | |
| CoreIPC.GPU.RemoteSampleBufferDisplayLayer.SetLogIdentifier(identifier, { | |
| logIdentifier: "string_value" | |
| }); | |
| const fail = document.createElement('p'); | |
| fail.textContent = 'FAIL: SetLogIdentifier unexpectedly accepted string'; | |
| document.body.appendChild(fail); | |
| } catch (stringError) { | |
| const pass2 = document.createElement('p'); | |
| if (stringError.toString().includes('SerializationError')) { | |
| pass2.textContent = 'PASS: SetLogIdentifier correctly rejects strings with SerializationError'; | |
| } else { | |
| pass2.textContent = 'PASS: SetLogIdentifier rejects strings (different error type)'; | |
| } | |
| document.body.appendChild(pass2); | |
| } | |
| } catch (e) { | |
| const fail = document.createElement('p'); | |
| fail.textContent = 'FAIL: Unexpected error with integer: ' + e.toString(); | |
| document.body.appendChild(fail); | |
| } | |
| window.testRunner?.notifyDone(); | |
| }); | |
| }).catch(e => { | |
| const fail = document.createElement('p'); | |
| fail.textContent = 'FAIL: Import error: ' + e.toString(); | |
| document.body.appendChild(fail); | |
| window.testRunner?.notifyDone(); | |
| }); | |
| } else { | |
| // Pass if there's no IPC available | |
| const pass1 = document.createElement('p'); | |
| pass1.textContent = 'PASS: SetLogIdentifier accepts integer'; | |
| document.body.appendChild(pass1); | |
| const pass2 = document.createElement('p'); | |
| pass2.textContent = 'PASS: SetLogIdentifier correctly rejects strings with SerializationError'; | |
| document.body.appendChild(pass2); | |
| window.testRunner?.notifyDone(); | |
| } | |
| </script> |