@filteringdev/tinyshield 3.6.1 → 3.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -16,6 +16,7 @@ export function RunTinyShieldUserscript(BrowserWindow, UserscriptName = 'tinyShi
16
16
  const OriginalArrayMap = BrowserWindow.Array.prototype.map;
17
17
  const OriginalString = BrowserWindow.String;
18
18
  const OriginalArrayJoin = BrowserWindow.Array.prototype.join;
19
+ const OriginalObjectGetPrototypeOf = BrowserWindow.Object.getPrototypeOf;
19
20
  const ProtectedFunctionStrings = ['toString', 'get', 'set'];
20
21
  BrowserWindow.Function.prototype.toString = new Proxy(BrowserWindow.Function.prototype.toString, {
21
22
  // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
@@ -38,7 +39,7 @@ export function RunTinyShieldUserscript(BrowserWindow, UserscriptName = 'tinyShi
38
39
  if (Args.length > 0 && typeof Args[0] !== 'function') {
39
40
  return Reflect.apply(Target, ThisArg, Args);
40
41
  }
41
- let ArgText = SafeArrayToString(Args, { OriginalArrayMap, OriginalString, OriginalArrayJoin });
42
+ let ArgText = SafeArrayToString(Args, { OriginalArrayMap, OriginalString, OriginalArrayJoin, OriginalObjectGetPrototypeOf });
42
43
  if (ASInitPositiveRegExps.filter(ASInitPositiveRegExp => ASInitPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText)).length >= 2).length === 1) {
43
44
  console.debug(`[${UserscriptName}]: Map.prototype.get:`, ThisArg, Args);
44
45
  throw new Error();
@@ -58,7 +59,7 @@ export function RunTinyShieldUserscript(BrowserWindow, UserscriptName = 'tinyShi
58
59
  BrowserWindow.Map.prototype.set = new Proxy(BrowserWindow.Map.prototype.set, {
59
60
  apply(Target, ThisArg, Args) {
60
61
  let ArgText = '';
61
- ArgText = SafeArrayToString(Args, { OriginalArrayMap, OriginalString, OriginalArrayJoin });
62
+ ArgText = SafeArrayToString(Args, { OriginalArrayMap, OriginalString, OriginalArrayJoin, OriginalObjectGetPrototypeOf });
62
63
  if (ASReinsertedAdvInvenPositiveRegExps.filter(ASReinsertedAdvInvenPositiveRegExp => ASReinsertedAdvInvenPositiveRegExp.filter(Index => OriginalRegExpTest.call(Index, ArgText)).length >= 3).length === 1) {
63
64
  console.debug(`[${UserscriptName}]: Map.prototype.set:`, ThisArg, Args);
64
65
  throw new Error();
@@ -2,6 +2,7 @@ type OriginalAPI = {
2
2
  OriginalArrayMap: typeof Array.prototype.map;
3
3
  OriginalString: typeof String;
4
4
  OriginalArrayJoin: typeof Array.prototype.join;
5
+ OriginalObjectGetPrototypeOf: typeof Object.getPrototypeOf;
5
6
  };
6
7
  export declare function SafeArrayToString(This: unknown[], OriginalAPI: OriginalAPI): string;
7
8
  export {};
@@ -1,4 +1,9 @@
1
1
  export function SafeArrayToString(This, OriginalAPI) {
2
- const Mapped = OriginalAPI.OriginalArrayMap.call(This, (Value) => OriginalAPI.OriginalString(Value));
2
+ const Mapped = OriginalAPI.OriginalArrayMap.call(This, (Value) => {
3
+ if (Value && typeof Value === 'object' && OriginalAPI.OriginalObjectGetPrototypeOf(Value) === null) {
4
+ return '[Object: null prototype]';
5
+ }
6
+ return OriginalAPI.OriginalString(Value);
7
+ });
3
8
  return OriginalAPI.OriginalArrayJoin.call(Mapped);
4
9
  }