`in` operator not working correctly when using Proxy as VM context
Personne n'a encore pris cette issue.
- Langage dominant
- JavaScript
- Étoiles
- 122k
- Forks
- 37.3k
- Merge moyen
- 4 j 2 h
- PR mergées (30 j)
- 283
Description
- Version: v12.13.1
- Platform: Windows 10
The in operator does not work correctly when using a Proxy as a VM context.
var o = {};
var p = new Proxy(o, {
has(target, key) {
console.log('has', key);
return Reflect.has(target, key);
},
get(target, key, receiver) {
console.log('get', key);
return Reflect.get(target, key, receiver);
},
});
vm.createContext(p);
vm.runInContext(`this.abcInThis = 'abc' in this`, p);
console.log(JSON.stringify(o)); // Prints {"abcInThis":false}
In the above code, the expected output is:
has abc
{"abcInThis":false}
but the actual output is:
get abc
{"abcInThis":true}
If we remove the get(target, key, receiver) function, the still incorrect output is:
{"abcInThis":false}
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par reproduire l’exemple de Proxy fourni via vm.createContext et vm.runInContext, puis lisez l’implémentation du contexte VM et la manière dont elle gère les vérifications et l’accès aux propriétés. Le travail est terminé lorsque l’opérateur in invoque le trap has du Proxy et que la sortie observée correspond au comportement attendu, avec une couverture de régression pour l’exemple.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript
- Domaine
- backend
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- Clairement spécifiée
- Accessibilité débutants
- 48/100