browser(firefox): do not use Array.prototype.toJSON for serialization (#6767)

This commit is contained in:
Yury Semikhatsky 2021-05-26 22:38:53 +00:00 committed by GitHub
parent d36bffb9a9
commit f60b79a311
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 13 additions and 7 deletions

View file

@ -1,2 +1,2 @@
1267 1268
Changed: lushnikov@chromium.org Thu 20 May 2021 03:27:19 PM PDT Changed: yurys@chromium.org Wed 26 May 2021 03:35:57 PM PDT

View file

@ -294,18 +294,24 @@ class ExecutionContext {
this._remoteObjects = new Map(); this._remoteObjects = new Map();
this._id = generateId(); this._id = generateId();
this._auxData = auxData; this._auxData = auxData;
this._jsonStringifyObject = this._debuggee.executeInGlobal(`((stringify, dateProto, object) => { this._jsonStringifyObject = this._debuggee.executeInGlobal(`((stringify, object) => {
const oldToJson = dateProto.toJSON; const oldToJson = Date.prototype.toJSON;
dateProto.toJSON = undefined; Date.prototype.toJSON = undefined;
const oldArrayToJson = Array.prototype.toJSON;
Array.prototype.toJSON = undefined;
let hasSymbol = false; let hasSymbol = false;
const result = stringify(object, (key, value) => { const result = stringify(object, (key, value) => {
if (typeof value === 'symbol') if (typeof value === 'symbol')
hasSymbol = true; hasSymbol = true;
return value; return value;
}); });
dateProto.toJSON = oldToJson;
Date.prototype.toJSON = oldToJson;
Array.prototype.toJSON = oldArrayToJson;
return hasSymbol ? undefined : result; return hasSymbol ? undefined : result;
}).bind(null, JSON.stringify.bind(JSON), Date.prototype)`).return; }).bind(null, JSON.stringify.bind(JSON))`).return;
} }
id() { id() {