From a08f33e09db55438a8cef1cb333eaeb511645db1 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Mon, 12 Oct 2020 11:00:30 -0400 Subject: [PATCH] Prevent only target (leaf) property from being overtaken Related discussion: - https://github.com/uBlockOrigin/uBlock-issues/issues/156#issuecomment-707095193 Related commit: - https://github.com/gorhill/uBlock/commit/6e010ecc0f9471818733e40ee37cd69336faddeb --- assets/resources/scriptlets.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/resources/scriptlets.js b/assets/resources/scriptlets.js index 570e72cf4..78ae17cd7 100644 --- a/assets/resources/scriptlets.js +++ b/assets/resources/scriptlets.js @@ -741,7 +741,7 @@ }; // https://github.com/uBlockOrigin/uBlock-issues/issues/156 // Support multiple trappers for the same property. - const trapProp = function(owner, prop, handler) { + const trapProp = function(owner, prop, configurable, handler) { if ( handler.init(owner[prop]) === false ) { return; } const odesc = Object.getOwnPropertyDescriptor(owner, prop); let prevGetter, prevSetter; @@ -754,7 +754,7 @@ } } Object.defineProperty(owner, prop, { - configurable: false, + configurable, get() { if ( prevGetter !== undefined ) { prevGetter(); @@ -772,7 +772,7 @@ const trapChain = function(owner, chain) { const pos = chain.indexOf('.'); if ( pos === -1 ) { - trapProp(owner, chain, { + trapProp(owner, chain, false, { v: undefined, init: function(v) { if ( mustAbort(v) ) { return false; } @@ -798,7 +798,7 @@ trapChain(v, chain); return; } - trapProp(owner, prop, { + trapProp(owner, prop, true, { v: undefined, init: function(v) { this.v = v;