summaryrefslogtreecommitdiff
path: root/test/known_issues
diff options
context:
space:
mode:
authorFranziska Hinkelmann <franzih@chromium.org>2017-02-09 12:40:25 +0100
committerJames M Snell <jasnell@gmail.com>2017-02-11 09:48:11 -0800
commit5cd9d76b02b516ccadf7894f7de731e3f8b437da (patch)
treec964711518a57b184b8a79b0769a1cbacd223aea /test/known_issues
parent02371985f1af28ff34da8bc526cadbdb50fe32a9 (diff)
downloadandroid-node-v8-5cd9d76b02b516ccadf7894f7de731e3f8b437da.tar.gz
android-node-v8-5cd9d76b02b516ccadf7894f7de731e3f8b437da.tar.bz2
android-node-v8-5cd9d76b02b516ccadf7894f7de731e3f8b437da.zip
test: add vm module edge cases
Add two, admittedly contrived, examples that test edge cases of the vm module. They demonstrate that the if statements `if (maybe_rv.IsEmpty())` and `if (maybe_prop_attr.IsNothing())` in the GetterCallback and the QueryCallback are observable. Both GetterCallback and QueryCallback explicitly check the global_proxy() if a property is not found on the sandbox. In these tests, the explicit check inside the callback yields different results than deferring the check until after the callback. The check is deferred, if the callbacks do not intercept, i.e., if args.GetReturnValue().Set() is not called. PR-URL: https://github.com/nodejs/node/pull/11265 Reviewed-By: Colin Ihrig <cjihrig@gmail.com> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Diffstat (limited to 'test/known_issues')
-rw-r--r--test/known_issues/test-vm-attributes-property-not-on-sandbox.js25
1 files changed, 25 insertions, 0 deletions
diff --git a/test/known_issues/test-vm-attributes-property-not-on-sandbox.js b/test/known_issues/test-vm-attributes-property-not-on-sandbox.js
new file mode 100644
index 0000000000..d9534c3d43
--- /dev/null
+++ b/test/known_issues/test-vm-attributes-property-not-on-sandbox.js
@@ -0,0 +1,25 @@
+'use strict';
+require('../common');
+const assert = require('assert');
+const vm = require('vm');
+
+// The QueryCallback explicitly calls GetRealNamedPropertyAttributes
+// on the global proxy if the property is not found on the sandbox.
+//
+// foo is not defined on the sandbox until we call CopyProperties().
+// In the QueryCallback, we do not find the property on the sandbox
+// and look up its PropertyAttributes on the global_proxy().
+// PropertyAttributes are always flattened to a value
+// descriptor.
+const sandbox = {};
+vm.createContext(sandbox);
+const code = `Object.defineProperty(
+ this,
+ 'foo',
+ { get: function() {return 17} }
+ );
+ var desc = Object.getOwnPropertyDescriptor(this, 'foo');`;
+
+vm.runInContext(code, sandbox);
+// The descriptor is flattened. We wrongly have typeof desc.value = 'number'.
+assert.strictEqual(typeof sandbox.desc.get, 'function');