| <!DOCTYPE HTML><!-- webkit-test-runner [ dumpJSConsoleLogInStdErr=true ] --> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <script src="../resources/js-test.js"></script> |
| </head> |
| <body> |
| <script> |
| description("Test crypto.getRandomValues behavior in oom situation.") |
| |
| let exceptionString = undefined; |
| |
| function useAllMemory() { |
| const a = [0]; |
| a.__proto__ = {}; |
| Object.defineProperty(a, 0, {get: foo}); |
| Object.defineProperty(a, 80000000, {}); |
| |
| function foo() { |
| new Uint8Array(a); |
| } |
| |
| new Promise(foo); |
| try { |
| for (let i = 0; i < 2**32; i++) { |
| new ArrayBuffer(1000); |
| } |
| } catch { |
| } |
| } |
| |
| useAllMemory(); |
| try { |
| crypto.getRandomValues(new Uint8Array()); |
| } catch (e) { |
| gc(); |
| exceptionString = e.toString(); |
| } |
| gc(); |
| shouldBeTrue("exceptionString == undefined || exceptionString === \"TypeError: Argument 1 ('array') to Crypto.getRandomValues must be an instance of ArrayBufferView\""); |
| testPassed("crypto.getRandomValues didn't crash"); |
| </script> |
| </body> |
| </html> |