Merge pull request #8605 from electron/no-more-global-buffer
Delete Buffer global when node integration is disabled
This commit is contained in:
commit
624e44dd6f
10 changed files with 22 additions and 31 deletions
|
@ -80,22 +80,3 @@ This is not bulletproof, but at the least, you should attempt the following:
|
||||||
|
|
||||||
Again, this list merely minimizes the risk, it does not remove it. If your goal
|
Again, this list merely minimizes the risk, it does not remove it. If your goal
|
||||||
is to display a website, a browser will be a more secure option.
|
is to display a website, a browser will be a more secure option.
|
||||||
|
|
||||||
## Buffer Global
|
|
||||||
|
|
||||||
Node's [Buffer](https://nodejs.org/api/buffer.html) class is currently available
|
|
||||||
as a global even when the `nodeintegration` attribute is not added. You can
|
|
||||||
delete this in your app by doing the following in your `preload` script:
|
|
||||||
|
|
||||||
```js
|
|
||||||
delete global.Buffer
|
|
||||||
```
|
|
||||||
|
|
||||||
Deleting it may break Node modules used in your preload script and app since
|
|
||||||
many libraries expect it to be a global instead of requiring it directly via:
|
|
||||||
|
|
||||||
```js
|
|
||||||
const {Buffer} = require('buffer')
|
|
||||||
```
|
|
||||||
|
|
||||||
The `Buffer` global may be removed in future major versions of Electron.
|
|
||||||
|
|
|
@ -127,6 +127,7 @@ if (nodeIntegration === 'true') {
|
||||||
// Delete Node's symbols after the Environment has been loaded.
|
// Delete Node's symbols after the Environment has been loaded.
|
||||||
process.once('loaded', function () {
|
process.once('loaded', function () {
|
||||||
delete global.process
|
delete global.process
|
||||||
|
delete global.Buffer
|
||||||
delete global.setImmediate
|
delete global.setImmediate
|
||||||
delete global.clearImmediate
|
delete global.clearImmediate
|
||||||
delete global.global
|
delete global.global
|
||||||
|
|
|
@ -801,8 +801,9 @@ describe('BrowserWindow module', function () {
|
||||||
describe('"node-integration" option', function () {
|
describe('"node-integration" option', function () {
|
||||||
it('disables node integration when specified to false', function (done) {
|
it('disables node integration when specified to false', function (done) {
|
||||||
var preload = path.join(fixtures, 'module', 'send-later.js')
|
var preload = path.join(fixtures, 'module', 'send-later.js')
|
||||||
ipcMain.once('answer', function (event, test) {
|
ipcMain.once('answer', function (event, typeofProcess, typeofBuffer) {
|
||||||
assert.equal(test, 'undefined')
|
assert.equal(typeofProcess, 'undefined')
|
||||||
|
assert.equal(typeofBuffer, 'undefined')
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
w.destroy()
|
w.destroy()
|
||||||
|
|
2
spec/fixtures/module/declare-buffer.js
vendored
Normal file
2
spec/fixtures/module/declare-buffer.js
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
const Buffer = 'declared Buffer'
|
||||||
|
module.exports = Buffer
|
2
spec/fixtures/module/preload-node-off.js
vendored
2
spec/fixtures/module/preload-node-off.js
vendored
|
@ -1,6 +1,6 @@
|
||||||
setImmediate(function () {
|
setImmediate(function () {
|
||||||
try {
|
try {
|
||||||
console.log([typeof process, typeof setImmediate, typeof global].join(' '))
|
console.log([typeof process, typeof setImmediate, typeof global, typeof Buffer].join(' '))
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.log(e.message)
|
console.log(e.message)
|
||||||
}
|
}
|
||||||
|
|
2
spec/fixtures/module/preload.js
vendored
2
spec/fixtures/module/preload.js
vendored
|
@ -1 +1 @@
|
||||||
console.log([typeof require, typeof module, typeof process].join(' '))
|
console.log([typeof require, typeof module, typeof process, typeof Buffer].join(' '))
|
||||||
|
|
2
spec/fixtures/module/send-later.js
vendored
2
spec/fixtures/module/send-later.js
vendored
|
@ -1,4 +1,4 @@
|
||||||
var ipcRenderer = require('electron').ipcRenderer
|
var ipcRenderer = require('electron').ipcRenderer
|
||||||
window.onload = function () {
|
window.onload = function () {
|
||||||
ipcRenderer.send('answer', typeof window.process)
|
ipcRenderer.send('answer', typeof window.process, typeof window.Buffer)
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,12 @@ describe('third-party module', function () {
|
||||||
assert.strictEqual(require('./fixtures/module/declare-global'), 'declared global')
|
assert.strictEqual(require('./fixtures/module/declare-global'), 'declared global')
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe('Buffer', function () {
|
||||||
|
it('can be declared in a module', function () {
|
||||||
|
assert.strictEqual(require('./fixtures/module/declare-buffer'), 'declared Buffer')
|
||||||
|
})
|
||||||
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -171,7 +171,7 @@ describe('<webview> tag', function () {
|
||||||
describe('preload attribute', function () {
|
describe('preload attribute', function () {
|
||||||
it('loads the script before other scripts in window', function (done) {
|
it('loads the script before other scripts in window', function (done) {
|
||||||
var listener = function (e) {
|
var listener = function (e) {
|
||||||
assert.equal(e.message, 'function object object')
|
assert.equal(e.message, 'function object object function')
|
||||||
webview.removeEventListener('console-message', listener)
|
webview.removeEventListener('console-message', listener)
|
||||||
done()
|
done()
|
||||||
}
|
}
|
||||||
|
@ -181,9 +181,9 @@ describe('<webview> tag', function () {
|
||||||
document.body.appendChild(webview)
|
document.body.appendChild(webview)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('preload script can still use "process" in required modules when nodeintegration is off', function (done) {
|
it('preload script can still use "process" and "Buffer" in required modules when nodeintegration is off', function (done) {
|
||||||
webview.addEventListener('console-message', function (e) {
|
webview.addEventListener('console-message', function (e) {
|
||||||
assert.equal(e.message, 'object undefined object')
|
assert.equal(e.message, 'object undefined object function')
|
||||||
done()
|
done()
|
||||||
})
|
})
|
||||||
webview.setAttribute('preload', fixtures + '/module/preload-node-off.js')
|
webview.setAttribute('preload', fixtures + '/module/preload-node-off.js')
|
||||||
|
@ -212,7 +212,7 @@ describe('<webview> tag', function () {
|
||||||
|
|
||||||
it('works without script tag in page', function (done) {
|
it('works without script tag in page', function (done) {
|
||||||
var listener = function (e) {
|
var listener = function (e) {
|
||||||
assert.equal(e.message, 'function object object')
|
assert.equal(e.message, 'function object object function')
|
||||||
webview.removeEventListener('console-message', listener)
|
webview.removeEventListener('console-message', listener)
|
||||||
done()
|
done()
|
||||||
}
|
}
|
||||||
|
@ -224,7 +224,7 @@ describe('<webview> tag', function () {
|
||||||
|
|
||||||
it('resolves relative URLs', function (done) {
|
it('resolves relative URLs', function (done) {
|
||||||
var listener = function (e) {
|
var listener = function (e) {
|
||||||
assert.equal(e.message, 'function object object')
|
assert.equal(e.message, 'function object object function')
|
||||||
webview.removeEventListener('console-message', listener)
|
webview.removeEventListener('console-message', listener)
|
||||||
done()
|
done()
|
||||||
}
|
}
|
||||||
|
@ -318,7 +318,7 @@ describe('<webview> tag', function () {
|
||||||
|
|
||||||
it('does not break preload script', function (done) {
|
it('does not break preload script', function (done) {
|
||||||
var listener = function (e) {
|
var listener = function (e) {
|
||||||
assert.equal(e.message, 'function object object')
|
assert.equal(e.message, 'function object object function')
|
||||||
webview.removeEventListener('console-message', listener)
|
webview.removeEventListener('console-message', listener)
|
||||||
done()
|
done()
|
||||||
}
|
}
|
||||||
|
|
2
vendor/node
vendored
2
vendor/node
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit b64908216a6d5f84862b2b947985a513a6521cb3
|
Subproject commit 9eeeb53aa697a54561ffc6c94f06b3ac5963f398
|
Loading…
Add table
Reference in a new issue