Steps to reproduce:
- Add to user rules:
example.org#%#//scriptlet('trusted-json-set', 'Object.keys', '$..[data.ad]', '$remove$', '', 'arg')
- Navigate to - https://example.org/
- Run in console:
const obj = { a: 1 };
obj.self = obj;
Object.keys(obj)
Website is unresponsive.
It looks like that stuck in the loop in:
|
function getRecursiveCandidates(candidate: JsonPathCandidate): JsonPathCandidate[] { |
Probably changing it to something like:
function getRecursiveCandidates(candidate: JsonPathCandidate): JsonPathCandidate[] {
const output: JsonPathCandidate[] = [candidate];
const visitedObjects = new WeakSet<object>();
if (isObjectLike(candidate.value)) {
visitedObjects.add(candidate.value);
}
const initialChildren = getChildCandidates(candidate);
for (let i = 0; i < initialChildren.length; i += 1) {
if (isObjectLike(initialChildren[i].value)) {
if (visitedObjects.has(initialChildren[i].value)) {
continue;
}
visitedObjects.add(initialChildren[i].value);
}
output.push(initialChildren[i]);
}
let head = 1;
while (head < output.length) {
const childCandidates = getChildCandidates(output[head]);
for (let i = 0; i < childCandidates.length; i += 1) {
if (isObjectLike(childCandidates[i].value)) {
if (visitedObjects.has(childCandidates[i].value)) {
continue;
}
visitedObjects.add(childCandidates[i].value);
}
output.push(childCandidates[i]);
}
head += 1;
}
return output;
}
should fixes it.
Steps to reproduce:
Website is unresponsive.
It looks like that stuck in the loop in:
Scriptlets/src/helpers/json-path-utils.ts
Line 1282 in 320efda
Probably changing it to something like:
should fixes it.