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
Changed: lushnikov@chromium.org Thu 20 May 2021 03:27:19 PM PDT
1268
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._id = generateId();
this._auxData = auxData;
this._jsonStringifyObject = this._debuggee.executeInGlobal(`((stringify, dateProto, object) => {
const oldToJson = dateProto.toJSON;
dateProto.toJSON = undefined;
this._jsonStringifyObject = this._debuggee.executeInGlobal(`((stringify, object) => {
const oldToJson = Date.prototype.toJSON;
Date.prototype.toJSON = undefined;
const oldArrayToJson = Array.prototype.toJSON;
Array.prototype.toJSON = undefined;
let hasSymbol = false;
const result = stringify(object, (key, value) => {
if (typeof value === 'symbol')
hasSymbol = true;
return value;
});
dateProto.toJSON = oldToJson;
Date.prototype.toJSON = oldToJson;
Array.prototype.toJSON = oldArrayToJson;
return hasSymbol ? undefined : result;
}).bind(null, JSON.stringify.bind(JSON), Date.prototype)`).return;
}).bind(null, JSON.stringify.bind(JSON))`).return;
}
id() {