From 36afd7f5c3d3ccb36f1002095d1eca8112f69215 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 3 Aug 2016 15:18:34 -0400 Subject: [PATCH 1/3] Defend global.Promise against misbehaving polyfills. --- tools/tool-env/install-promise.js | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/tools/tool-env/install-promise.js b/tools/tool-env/install-promise.js index dc78ea6661..10dee1cf07 100644 --- a/tools/tool-env/install-promise.js +++ b/tools/tool-env/install-promise.js @@ -1,10 +1,24 @@ // Install a global ES2015-compliant Promise constructor that knows how to // run all its callbacks in Fibers. -var Promise = global.Promise = global.Promise || +var Promise = global.Promise || require("promise/lib/es6-extensions"); -require("meteor-promise").makeCompatible( - Promise, - require("fibers") -); +function makeCompatible(newPromise) { + require("meteor-promise").makeCompatible( + newPromise, + require("fibers") + ); +} + +makeCompatible(Promise); + +Object.defineProperty(global, "Promise", { + get: function () { + return Promise; + }, + + // Make the new Promise compatible with Fibers, but do not allow further + // modifications to global.Promise, e.g. by misbehaving polyfills. + set: makeCompatible +}); From 2de0fb59ef9023923ed4d0637808de66181e9bd5 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 3 Aug 2016 15:19:31 -0400 Subject: [PATCH 2/3] Make sure self-tests have a consistent runtime environment. --- tools/tool-testing/selftest.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/tool-testing/selftest.js b/tools/tool-testing/selftest.js index 49d5e7445a..15fe71bd31 100644 --- a/tools/tool-testing/selftest.js +++ b/tools/tool-testing/selftest.js @@ -27,6 +27,8 @@ var release = require('../packaging/release.js'); var projectContextModule = require('../project-context.js'); var upgraders = require('../upgraders.js'); +require("../tool-env/install-runtime.js"); + try { var phantomjs = require('phantomjs-prebuilt'); } catch (e) { From 1d5ca820df83795aa16ebd18e96a2ae76ed404c8 Mon Sep 17 00:00:00 2001 From: Ben Newman Date: Wed, 3 Aug 2016 15:21:16 -0400 Subject: [PATCH 3/3] Don't swallow unexpected errors when checking for phantomjs-prebuilt. --- tools/tool-testing/selftest.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/tool-testing/selftest.js b/tools/tool-testing/selftest.js index 15fe71bd31..c2ae7feb44 100644 --- a/tools/tool-testing/selftest.js +++ b/tools/tool-testing/selftest.js @@ -30,7 +30,7 @@ var upgraders = require('../upgraders.js'); require("../tool-env/install-runtime.js"); try { - var phantomjs = require('phantomjs-prebuilt'); + var phantomPath = require.resolve('phantomjs-prebuilt'); } catch (e) { throw new Error([ "Please install PhantomJS by running the following command:", @@ -42,6 +42,8 @@ try { ].join("\n")); } +var phantomjs = require(phantomPath); + // To allow long stack traces that cross async boundaries require('longjohn');