From b5c24dfbe8a80cfd6f1716a007724e56c98f426b Mon Sep 17 00:00:00 2001 From: TATSUNO Yasuhiro Date: Mon, 23 Sep 2019 19:25:15 +0900 Subject: [PATCH 01/33] doc: fix type of atime/mtime PR-URL: https://github.com/nodejs/node/pull/29666 Reviewed-By: Luigi Pinca --- doc/api/fs.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/api/fs.md b/doc/api/fs.md index 8aa2d6d8c04e1a..e9cf70c78b75d1 100644 --- a/doc/api/fs.md +++ b/doc/api/fs.md @@ -2086,8 +2086,8 @@ changes: --> * `fd` {integer} -* `atime` {integer} -* `mtime` {integer} +* `atime` {number|string|Date} +* `mtime` {number|string|Date} Synchronous version of [`fs.futimes()`][]. Returns `undefined`. @@ -3462,8 +3462,8 @@ changes: --> * `path` {string|Buffer|URL} -* `atime` {integer} -* `mtime` {integer} +* `atime` {number|string|Date} +* `mtime` {number|string|Date} Returns `undefined`. From 3f028551a8f679882b7ddc4d40788150fe27c168 Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Thu, 26 Sep 2019 23:21:52 -0400 Subject: [PATCH 02/33] module: move cjs type check behind flag MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/29732 Reviewed-By: Michaël Zasso Reviewed-By: David Carlier Reviewed-By: Jiawen Geng Reviewed-By: Colin Ihrig Reviewed-By: Jan Krems Reviewed-By: Gus Caplan Reviewed-By: James M Snell Reviewed-By: Anto Aravinth --- lib/internal/modules/cjs/loader.js | 2 +- test/es-module/test-esm-type-flag-errors.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index 5056a698b3b8cd..034938e56a2d6a 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -952,7 +952,7 @@ Module.prototype._compile = function(content, filename) { // Native extension for .js Module._extensions['.js'] = function(module, filename) { - if (filename.endsWith('.js')) { + if (experimentalModules && filename.endsWith('.js')) { const pkg = readPackageScope(filename); if (pkg && pkg.type === 'module') { throw new ERR_REQUIRE_ESM(filename); diff --git a/test/es-module/test-esm-type-flag-errors.js b/test/es-module/test-esm-type-flag-errors.js index a54a018ad9b774..8725fb62323b75 100644 --- a/test/es-module/test-esm-type-flag-errors.js +++ b/test/es-module/test-esm-type-flag-errors.js @@ -1,3 +1,4 @@ +// Flags: --experimental-modules 'use strict'; const common = require('../common'); const assert = require('assert'); From ab060bfdab0810cdd8a2cfe09c61d138dd2082fc Mon Sep 17 00:00:00 2001 From: "Simon A. Eugster" Date: Wed, 25 Sep 2019 14:58:10 +0200 Subject: [PATCH 03/33] doc: clarify fs.symlink() usage PR-URL: https://github.com/nodejs/node/pull/29700 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- doc/api/fs.md | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/doc/api/fs.md b/doc/api/fs.md index e9cf70c78b75d1..2b6e93860de7a2 100644 --- a/doc/api/fs.md +++ b/doc/api/fs.md @@ -3249,22 +3249,32 @@ changes: * `callback` {Function} * `err` {Error} -Asynchronous symlink(2). No arguments other than a possible exception are given -to the completion callback. The `type` argument is only available on Windows -and ignored on other platforms. It can be set to `'dir'`, `'file'`, or -`'junction'`. If the `type` argument is not set, Node will autodetect `target` -type and use `'file'` or `'dir'`. If the `target` does not exist, `'file'` will -be used. Windows junction points require the destination path to be absolute. -When using `'junction'`, the `target` argument will automatically be normalized -to absolute path. +Asynchronous symlink(2) which creates the link called `path` pointing to +`target`. No arguments other than a possible exception are given to the +completion callback. -Here is an example below: +The `type` argument is only available on Windows and ignored on other platforms. +It can be set to `'dir'`, `'file'`, or `'junction'`. If the `type` argument is +not set, Node will autodetect `target` type and use `'file'` or `'dir'`. If the +`target` does not exist, `'file'` will be used. Windows junction points require +the destination path to be absolute. When using `'junction'`, the `target` +argument will automatically be normalized to absolute path. + +Relative targets are relative to the link’s parent directory. ```js -fs.symlink('./foo', './new-port', callback); +fs.symlink('./mew', './example/mewtwo', callback); ``` -It creates a symbolic link named "new-port" that points to "foo". +The above example creates a symbolic link `mewtwo` in the `example` which points +to `mew` in the same directory: + +```bash +$ tree example/ +example/ +├── mew +└── mewtwo -> ./mew +``` ## fs.symlinkSync(target, path[, type]) From 588b388181b2884a3f7197c462227ce05c4c2358 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20Nie=C3=9Fen?= Date: Tue, 9 Oct 2018 09:36:46 +1100 Subject: [PATCH 12/33] crypto: use byteLength in timingSafeEqual PR-URL: https://github.com/nodejs/node/pull/29657 Co-authored-by: ZaneHannanAU Co-authored-by: Rich Trott Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Ben Noordhuis Reviewed-By: Sam Roberts Reviewed-By: Ruben Bridgewater Reviewed-By: Luigi Pinca Reviewed-By: Minwoo Jung --- lib/internal/crypto/util.js | 2 +- lib/internal/errors.js | 2 +- test/sequential/test-crypto-timing-safe-equal.js | 16 +++++++++++++++- 3 files changed, 17 insertions(+), 3 deletions(-) diff --git a/lib/internal/crypto/util.js b/lib/internal/crypto/util.js index ddef1a163ceec2..544d44669ae466 100644 --- a/lib/internal/crypto/util.js +++ b/lib/internal/crypto/util.js @@ -78,7 +78,7 @@ function timingSafeEqual(buf1, buf2) { throw new ERR_INVALID_ARG_TYPE('buf2', ['Buffer', 'TypedArray', 'DataView'], buf2); } - if (buf1.length !== buf2.length) { + if (buf1.byteLength !== buf2.byteLength) { throw new ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH(); } return _timingSafeEqual(buf1, buf2); diff --git a/lib/internal/errors.js b/lib/internal/errors.js index eff688e6f5fc07..8412c710c9c06c 100644 --- a/lib/internal/errors.js +++ b/lib/internal/errors.js @@ -750,7 +750,7 @@ E('ERR_CRYPTO_SCRYPT_NOT_SUPPORTED', 'Scrypt algorithm not supported', Error); // Switch to TypeError. The current implementation does not seem right. E('ERR_CRYPTO_SIGN_KEY_REQUIRED', 'No key provided to sign', Error); E('ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH', - 'Input buffers must have the same length', RangeError); + 'Input buffers must have the same byte length', RangeError); E('ERR_DNS_SET_SERVERS_FAILED', 'c-ares failed to set servers: "%s" [%s]', Error); E('ERR_DOMAIN_CALLBACK_NOT_AVAILABLE', diff --git a/test/sequential/test-crypto-timing-safe-equal.js b/test/sequential/test-crypto-timing-safe-equal.js index dcebef29d782b0..75385e5f88ad50 100644 --- a/test/sequential/test-crypto-timing-safe-equal.js +++ b/test/sequential/test-crypto-timing-safe-equal.js @@ -18,12 +18,26 @@ assert.strictEqual( false ); +{ + // Test TypedArrays with different lengths but equal byteLengths. + const buf = crypto.randomBytes(16).buffer; + const a1 = new Uint8Array(buf); + const a2 = new Uint16Array(buf); + const a3 = new Uint32Array(buf); + + for (const left of [a1, a2, a3]) { + for (const right of [a1, a2, a3]) { + assert.strictEqual(crypto.timingSafeEqual(left, right), true); + } + } +} + common.expectsError( () => crypto.timingSafeEqual(Buffer.from([1, 2, 3]), Buffer.from([1, 2])), { code: 'ERR_CRYPTO_TIMING_SAFE_EQUAL_LENGTH', type: RangeError, - message: 'Input buffers must have the same length' + message: 'Input buffers must have the same byte length' } ); From 64740d44b5b1414ee1ab2fa313e9fab6def3ebf4 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Mon, 23 Sep 2019 08:21:47 +0200 Subject: [PATCH 13/33] src: fix compiler warning in inspector_profiler.cc Currently, the following compiler warnings is generated: ../src/inspector_profiler.cc:231:5: warning: ignoring return value of function declared with 'warn_unused_result' attribute [-Wunused-result] profile->Set(context, FIXED_ONE_BYTE_STRING(isolate, "source-map-cache") ^~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 1 warning generated. This commit adds a .ToChecked() call to avoid the warning. PR-URL: https://github.com/nodejs/node/pull/29660 Reviewed-By: David Carlier Reviewed-By: Colin Ihrig Reviewed-By: Ruben Bridgewater Reviewed-By: Minwoo Jung Reviewed-By: James M Snell --- src/inspector_profiler.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/inspector_profiler.cc b/src/inspector_profiler.cc index 1444a36bdf95a5..b5f63b2b41389d 100644 --- a/src/inspector_profiler.cc +++ b/src/inspector_profiler.cc @@ -229,7 +229,7 @@ void V8CoverageConnection::WriteProfile(Local message) { // Avoid writing to disk if no source-map data: if (!source_map_cache_v->IsUndefined()) { profile->Set(context, FIXED_ONE_BYTE_STRING(isolate, "source-map-cache"), - source_map_cache_v); + source_map_cache_v).ToChecked(); } Local result_s; From a04fc86723daadbb544785a5e96f0774e35ba792 Mon Sep 17 00:00:00 2001 From: rickyes Date: Tue, 24 Sep 2019 00:28:40 +0800 Subject: [PATCH 14/33] http2: optimize the altsvc Max bytes limit, define and use constants PR-URL: https://github.com/nodejs/node/pull/29673 Reviewed-By: Ruben Bridgewater Reviewed-By: Colin Ihrig Reviewed-By: Luigi Pinca Reviewed-By: Anna Henningsen Reviewed-By: Richard Lau Reviewed-By: Minwoo Jung Reviewed-By: Yongsheng Zhang Reviewed-By: James M Snell --- lib/internal/http2/core.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/internal/http2/core.js b/lib/internal/http2/core.js index 01a8a823adac08..6232df7f549a28 100644 --- a/lib/internal/http2/core.js +++ b/lib/internal/http2/core.js @@ -162,6 +162,7 @@ function debugSessionObj(session, message, ...args) { const kMaxFrameSize = (2 ** 24) - 1; const kMaxInt = (2 ** 32) - 1; const kMaxStreams = (2 ** 31) - 1; +const kMaxALTSVC = (2 ** 14) - 2; // eslint-disable-next-line no-control-regex const kQuotedString = /^[\x09\x20-\x5b\x5d-\x7e\x80-\xff]*$/; @@ -1498,7 +1499,7 @@ class ServerHttp2Session extends Http2Session { throw new ERR_INVALID_CHAR('alt'); // Max length permitted for ALTSVC - if ((alt.length + (origin !== undefined ? origin.length : 0)) > 16382) + if ((alt.length + (origin !== undefined ? origin.length : 0)) > kMaxALTSVC) throw new ERR_HTTP2_ALTSVC_LENGTH(); this[kHandle].altsvc(stream, origin || '', alt); @@ -1530,7 +1531,7 @@ class ServerHttp2Session extends Http2Session { len += origin.length; } - if (len > 16382) + if (len > kMaxALTSVC) throw new ERR_HTTP2_ORIGIN_LENGTH(); this[kHandle].origin(arr, count); From 17c3478d7851928bb97f31c2be3a32feb0d8443e Mon Sep 17 00:00:00 2001 From: David Carlier Date: Sat, 31 Aug 2019 05:52:48 +0100 Subject: [PATCH 15/33] src: fix asan build for gcc/clang Add missing header for LSAN. PR-URL: https://github.com/nodejs/node/pull/29383 Reviewed-By: Ben Noordhuis Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- src/node_main_instance.cc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/node_main_instance.cc b/src/node_main_instance.cc index 630933cec8a4d7..e41e0c1fb6fe1f 100644 --- a/src/node_main_instance.cc +++ b/src/node_main_instance.cc @@ -3,6 +3,9 @@ #include "node_options-inl.h" #include "node_v8_platform-inl.h" #include "util-inl.h" +#if defined(LEAK_SANITIZER) +#include +#endif namespace node { From 2b76cb6ddaf0de010e57a2bad519251401835473 Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Mon, 23 Sep 2019 15:10:58 +0300 Subject: [PATCH 16/33] doc: remove align from tables This is obsolete. Also, in our case it doesn't seem to have any effect since the table cells have their natural width, i.e. as much as they need. PR-URL: https://github.com/nodejs/node/pull/29668 Reviewed-By: Ruben Bridgewater Reviewed-By: Luigi Pinca Reviewed-By: David Carlier --- doc/api/n-api.md | 2 +- doc/api/url.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/api/n-api.md b/doc/api/n-api.md index 83ec6e66b63984..6ae0f44643c3b1 100644 --- a/doc/api/n-api.md +++ b/doc/api/n-api.md @@ -161,7 +161,7 @@ to recompile for new versions of Node.js which are listed as supporting a later version. | | 1 | 2 | 3 | 4 | 5 | -|:-----:|:-------:|:--------:|:--------:|:--------:|:---------:| +|-------|---------|----------|----------|----------|-----------| | v6.x | | | v6.14.2* | | | | v8.x | v8.0.0* | v8.10.0* | v8.11.2 | v8.16.0 | | | v9.x | v9.0.0* | v9.3.0* | v9.11.0* | | | diff --git a/doc/api/url.md b/doc/api/url.md index a65cb2a6786053..6cb82c71676e3a 100644 --- a/doc/api/url.md +++ b/doc/api/url.md @@ -316,7 +316,7 @@ The port value can be an empty string in which case the port depends on the protocol/scheme: | protocol | port | -| :------- | :--- | +| -------- | ---- | | "ftp" | 21 | | "file" | | | "gopher" | 70 | From 7a6b05a26f11bc721f0f49d84de006fe67835aab Mon Sep 17 00:00:00 2001 From: XhmikosR Date: Mon, 23 Sep 2019 09:57:28 +0300 Subject: [PATCH 17/33] doc: fix 404 links For `www.cve.mitre.org` they don't seem to redirect www to naked. PR-URL: https://github.com/nodejs/node/pull/29661 Reviewed-By: Jiawen Geng Reviewed-By: Ruben Bridgewater Reviewed-By: James M Snell --- doc/changelogs/CHANGELOG_V010.md | 2 +- doc/changelogs/CHANGELOG_V012.md | 2 +- doc/changelogs/CHANGELOG_V12.md | 2 +- doc/changelogs/CHANGELOG_V4.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/doc/changelogs/CHANGELOG_V010.md b/doc/changelogs/CHANGELOG_V010.md index 43131745be61e9..d01f98d059e9ea 100644 --- a/doc/changelogs/CHANGELOG_V010.md +++ b/doc/changelogs/CHANGELOG_V010.md @@ -136,7 +136,7 @@ This is a security release. All Node.js users should consult the security releas This is a security release. All Node.js users should consult the security release summary at https://nodejs.org/en/blog/vulnerability/june-2016-security-releases/ for details on patched vulnerabilities. * libuv: (CVE-2014-9748) Fixes a bug in the read/write locks implementation for Windows XP and Windows 2003 that can lead to undefined and potentially unsafe behaviour. More information can be found at https://github.com/libuv/libuv/issues/515 or at https://nodejs.org/en/blog/vulnerability/june-2016-security-releases/. -* V8: (CVE-2016-1669) Fixes a potential Buffer overflow vulnerability discovered in V8, more details can be found in the CVE at https://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1669 or at https://nodejs.org/en/blog/vulnerability/june-2016-security-releases/. +* V8: (CVE-2016-1669) Fixes a potential Buffer overflow vulnerability discovered in V8, more details can be found in the CVE at https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1669 or at https://nodejs.org/en/blog/vulnerability/june-2016-security-releases/. ### Commits: diff --git a/doc/changelogs/CHANGELOG_V012.md b/doc/changelogs/CHANGELOG_V012.md index e563ea6a084308..c38d33bebb75e0 100644 --- a/doc/changelogs/CHANGELOG_V012.md +++ b/doc/changelogs/CHANGELOG_V012.md @@ -120,7 +120,7 @@ This is a security release. All Node.js users should consult the security releas This is a security release. All Node.js users should consult the security release summary at https://nodejs.org/en/blog/vulnerability/june-2016-security-releases/ for details on patched vulnerabilities. * libuv: (CVE-2014-9748) Fixes a bug in the read/write locks implementation for Windows XP and Windows 2003 that can lead to undefined and potentially unsafe behaviour. More information can be found at https://github.com/libuv/libuv/issues/515 or at https://nodejs.org/en/blog/vulnerability/june-2016-security-releases/. -* V8: (CVE-2016-1669) Fixes a potential Buffer overflow vulnerability discovered in V8, more details can be found in the CVE at https://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1669 or at https://nodejs.org/en/blog/vulnerability/june-2016-security-releases/. +* V8: (CVE-2016-1669) Fixes a potential Buffer overflow vulnerability discovered in V8, more details can be found in the CVE at https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1669 or at https://nodejs.org/en/blog/vulnerability/june-2016-security-releases/. ### Commits: diff --git a/doc/changelogs/CHANGELOG_V12.md b/doc/changelogs/CHANGELOG_V12.md index 031d4dc1ebd90c..78fe2cc7c79b59 100644 --- a/doc/changelogs/CHANGELOG_V12.md +++ b/doc/changelogs/CHANGELOG_V12.md @@ -1172,7 +1172,7 @@ Vulnerabilities fixed: * [[`8e28259bf8`](https://github.com/nodejs/node/commit/8e28259bf8)] - **test**: change formatting of fixtures/keys/Makefile (Alex Aubuchon) [#27962](https://github.com/nodejs/node/pull/27962) * [[`d258504a31`](https://github.com/nodejs/node/commit/d258504a31)] - **test**: change fixtures.readSync to fixtures.readKey (Alex Aubuchon) [#27962](https://github.com/nodejs/node/pull/27962) * [[`328b2d0c88`](https://github.com/nodejs/node/commit/328b2d0c88)] - **test**: remove uneeded agent keypair in fixtures/ (Alex Aubuchon) [#27962](https://github.com/nodejs/node/pull/27962) -* [[`a0d2862b1e`](https://github.om/nodejs/node/commit/a0d2862b1e)] - **test**: move foafssl certs to fixtures/keys/ (Alex Aubuchon) [#27962](https://github.com/nodejs/node/pull/27962) +* [[`a0d2862b1e`](https://github.com/nodejs/node/commit/a0d2862b1e)] - **test**: move foafssl certs to fixtures/keys/ (Alex Aubuchon) [#27962](https://github.com/nodejs/node/pull/27962) * [[`af9eb9648e`](https://github.com/nodejs/node/commit/af9eb9648e)] - **test**: remove uneeded alice certs in fixtures/ (Alex Aubuchon) [#27962](https://github.com/nodejs/node/pull/27962) * [[`ee62fa172c`](https://github.com/nodejs/node/commit/ee62fa172c)] - **test**: remove uneeded certs in fixtures/ (Alex Aubuchon) [#27962](https://github.com/nodejs/node/pull/27962) * [[`f41dfd71a0`](https://github.com/nodejs/node/commit/f41dfd71a0)] - **test**: move dherror.pem to fixtures/keys/ (Alex Aubuchon) [#27962](https://github.com/nodejs/node/pull/27962) diff --git a/doc/changelogs/CHANGELOG_V4.md b/doc/changelogs/CHANGELOG_V4.md index 6a9a2d1f94f27c..7861b5b752fb77 100644 --- a/doc/changelogs/CHANGELOG_V4.md +++ b/doc/changelogs/CHANGELOG_V4.md @@ -1687,7 +1687,7 @@ This LTS release comes with 89 commits. This includes 46 commits that are docs r This is an important security release. All Node.js users should consult the security release summary at nodejs.org for details on patched vulnerabilities. -This release is specifically related to a Buffer overflow vulnerability discovered in v8, more details can be found [in the CVE](https://www.cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1669) +This release is specifically related to a Buffer overflow vulnerability discovered in v8, more details can be found [in the CVE](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-1669) ### Commits From c2791dcd9c915dc0afedb313ac92d6517ae7b6ca Mon Sep 17 00:00:00 2001 From: Vse Mozhet Byt Date: Mon, 23 Sep 2019 16:57:03 +0300 Subject: [PATCH 18/33] doc: fix some recent nits PR-URL: https://github.com/nodejs/node/pull/29670 Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen Reviewed-By: Yongsheng Zhang Reviewed-By: Ruben Bridgewater Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- doc/api/events.md | 5 +++-- doc/api/fs.md | 2 +- doc/api/process.md | 2 +- doc/api/tls.md | 26 +++++++++++++------------- 4 files changed, 18 insertions(+), 17 deletions(-) diff --git a/doc/api/events.md b/doc/api/events.md index 8d409582329c14..9b22d33e12caa0 100644 --- a/doc/api/events.md +++ b/doc/api/events.md @@ -709,7 +709,7 @@ The `Promise` will resolve with an array of all the arguments emitted to the given event. This method is intentionally generic and works with the web platform -[EventTarget](WHATWG-EventTarget) interface, which has no special +[EventTarget][WHATWG-EventTarget] interface, which has no special `'error'` event semantics and does not listen to the `'error'` event. ```js @@ -739,7 +739,8 @@ async function run() { run(); ``` -[WHATWG-EventTarget](https://dom.spec.whatwg.org/#interface-eventtarget) + +[WHATWG-EventTarget]: https://dom.spec.whatwg.org/#interface-eventtarget [`--trace-warnings`]: cli.html#cli_trace_warnings [`EventEmitter.defaultMaxListeners`]: #events_eventemitter_defaultmaxlisteners [`domain`]: domain.html diff --git a/doc/api/fs.md b/doc/api/fs.md index 2b6e93860de7a2..7ea6835387719b 100644 --- a/doc/api/fs.md +++ b/doc/api/fs.md @@ -4253,7 +4253,7 @@ then resolves the `Promise` with no arguments upon success. This function does not work on AIX versions before 7.1, it will resolve the `Promise` with an error using code `UV_ENOSYS`. -#### filehandle.write(buffer, offset, length, position) +#### filehandle.write(buffer[, offset[, length[, position]]]) diff --git a/doc/api/process.md b/doc/api/process.md index 57b4eae02b2faa..bf632a199000ce 100644 --- a/doc/api/process.md +++ b/doc/api/process.md @@ -2244,7 +2244,7 @@ undefined true > process.emitWarning('test', 'DeprecationWarning'); Thrown: -{ [DeprecationWarning: test] name: 'DeprecationWarning' } +[DeprecationWarning: test] { name: 'DeprecationWarning' } ``` ## process.title diff --git a/doc/api/tls.md b/doc/api/tls.md index 24d826191f675a..68cf5e36bc9f40 100644 --- a/doc/api/tls.md +++ b/doc/api/tls.md @@ -842,18 +842,6 @@ See [SSL_CIPHER_get_name](https://www.openssl.org/docs/man1.1.1/man3/SSL_CIPHER_get_name.html) for more information. -### tlsSocket.getSharedSigalgs() - - -* Returns: {Array} List of signature algorithms shared between the server and -the client in the order of decreasing preference. - -See -[SSL_get_shared_sigalgs](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_shared_sigalgs.html) -for more information. - ### tlsSocket.getEphemeralKeyInfo() + +* Returns: {Array} List of signature algorithms shared between the server and +the client in the order of decreasing preference. + +See +[SSL_get_shared_sigalgs](https://www.openssl.org/docs/man1.1.1/man3/SSL_get_shared_sigalgs.html) +for more information. + ### tlsSocket.getTLSTicket() ```js const { Readable } = require('stream'); const myReadable = new Readable({ read(size) { - if (checkSomeErrorCondition()) { - process.nextTick(() => this.emit('error', err)); - return; + const err = checkSomeErrorCondition(); + if (err) { + this.destroy(err); + } else { + // Do some work. } - // Do some work. } }); ``` @@ -2776,6 +2772,7 @@ contain multi-byte characters. [`process.stderr`]: process.html#process_process_stderr [`process.stdin`]: process.html#process_process_stdin [`process.stdout`]: process.html#process_process_stdout +[`readable._read()`]: #stream_readable_read_size_1 [`readable.push('')`]: #stream_readable_push [`readable.setEncoding()`]: #stream_readable_setencoding_encoding [`stream.Readable.from()`]: #stream_stream_readable_from_iterable_options @@ -2786,6 +2783,9 @@ contain multi-byte characters. [`stream.uncork()`]: #stream_writable_uncork [`stream.unpipe()`]: #stream_readable_unpipe_destination [`stream.wrap()`]: #stream_readable_wrap_stream +[`writable._final()`]: #stream_writable_final_callback +[`writable._write()`]: #stream_writable_write_chunk_encoding_callback_1 +[`writable._writev()`]: #stream_writable_writev_chunks_callback [`writable.cork()`]: #stream_writable_cork [`writable.end()`]: #stream_writable_end_chunk_encoding_callback [`writable.uncork()`]: #stream_writable_uncork From 1303e3551f305cfd5ba068eb47b6fd1e7d728a2f Mon Sep 17 00:00:00 2001 From: imhype <543717080@qq.com> Date: Wed, 25 Sep 2019 14:02:21 +0800 Subject: [PATCH 21/33] doc: clarify description of `readable.push()` method PR-URL: https://github.com/nodejs/node/pull/29687 Reviewed-By: James M Snell Reviewed-By: Matteo Collina Reviewed-By: Beth Griggs Reviewed-By: Trivikram Kamat --- doc/api/stream.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/api/stream.md b/doc/api/stream.md index 5c4c93886b9891..eb4b0b82740a8f 100644 --- a/doc/api/stream.md +++ b/doc/api/stream.md @@ -2149,8 +2149,8 @@ class SourceWrapper extends Readable { } ``` -The `readable.push()` method is intended be called only by `Readable` -implementers, and only from within the `readable._read()` method. +The `readable.push()` method is used to push the content +into the internal buffer. It can be driven by the `readable._read()` method. For streams not operating in object mode, if the `chunk` parameter of `readable.push()` is `undefined`, it will be treated as empty string or From d86f10cf0be76a11eef4b4602f3ea22e3c222aed Mon Sep 17 00:00:00 2001 From: exoego Date: Tue, 24 Sep 2019 16:50:36 +0900 Subject: [PATCH 22/33] doc: add KeyObject to type for crypto.createDecipheriv() argument MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/29689 Reviewed-By: David Carlier Reviewed-By: Ruben Bridgewater Reviewed-By: Tobias Nießen Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- doc/api/crypto.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/crypto.md b/doc/api/crypto.md index 7dd4e2ecbf4db6..5ac8b09820ef60 100644 --- a/doc/api/crypto.md +++ b/doc/api/crypto.md @@ -1736,7 +1736,7 @@ changes: --> * `algorithm` {string} -* `key` {string | Buffer | TypedArray | DataView} +* `key` {string | Buffer | TypedArray | DataView | KeyObject} * `iv` {string | Buffer | TypedArray | DataView | null} * `options` {Object} [`stream.transform` options][] * Returns: {Decipher} From 038cbb08de39d17337b32e2dc8e49e1e175bc90a Mon Sep 17 00:00:00 2001 From: Kirill Fomichev Date: Thu, 26 Sep 2019 09:02:45 +0300 Subject: [PATCH 23/33] doc: fix output in inspector HeapProfile example PR-URL: https://github.com/nodejs/node/pull/29711 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Ruben Bridgewater --- doc/api/inspector.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/inspector.md b/doc/api/inspector.md index c469ed9c5dbc45..3d9a956f095ede 100644 --- a/doc/api/inspector.md +++ b/doc/api/inspector.md @@ -216,7 +216,7 @@ session.on('HeapProfiler.addHeapSnapshotChunk', (m) => { }); session.post('HeapProfiler.takeHeapSnapshot', null, (err, r) => { - console.log('Runtime.takeHeapSnapshot done:', err, r); + console.log('HeapProfiler.takeHeapSnapshot done:', err, r); session.disconnect(); fs.closeSync(fd); }); From ef033d046ac8ecb93d0c2017d297118873a75079 Mon Sep 17 00:00:00 2001 From: Ruben Bridgewater Date: Wed, 25 Sep 2019 14:51:18 +0200 Subject: [PATCH 24/33] worker: fix process._fatalException return type This makes sure `process._fatalException()` returns a boolean when run inside of a worker. PR-URL: https://github.com/nodejs/node/pull/29706 Reviewed-By: Anna Henningsen Reviewed-By: David Carlier Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Minwoo Jung --- lib/internal/main/worker_thread.js | 40 ++++++++++--------- ...est-worker-non-fatal-uncaught-exception.js | 25 ++++++++++++ 2 files changed, 46 insertions(+), 19 deletions(-) create mode 100644 test/parallel/test-worker-non-fatal-uncaught-exception.js diff --git a/lib/internal/main/worker_thread.js b/lib/internal/main/worker_thread.js index 9cf6e669a9dbd9..9c4b578c188785 100644 --- a/lib/internal/main/worker_thread.js +++ b/lib/internal/main/worker_thread.js @@ -161,26 +161,28 @@ function workerOnGlobalUncaughtException(error, fromPromise) { } debug(`[${threadId}] uncaught exception handled = ${handled}`); - if (!handled) { - let serialized; - try { - const { serializeError } = require('internal/error-serdes'); - serialized = serializeError(error); - } catch {} - debug(`[${threadId}] uncaught exception serialized = ${!!serialized}`); - if (serialized) - port.postMessage({ - type: ERROR_MESSAGE, - error: serialized - }); - else - port.postMessage({ type: COULD_NOT_SERIALIZE_ERROR }); - - const { clearAsyncIdStack } = require('internal/async_hooks'); - clearAsyncIdStack(); - - process.exit(); + if (handled) { + return true; } + + let serialized; + try { + const { serializeError } = require('internal/error-serdes'); + serialized = serializeError(error); + } catch {} + debug(`[${threadId}] uncaught exception serialized = ${!!serialized}`); + if (serialized) + port.postMessage({ + type: ERROR_MESSAGE, + error: serialized + }); + else + port.postMessage({ type: COULD_NOT_SERIALIZE_ERROR }); + + const { clearAsyncIdStack } = require('internal/async_hooks'); + clearAsyncIdStack(); + + process.exit(); } // Patch the global uncaught exception handler so it gets picked up by diff --git a/test/parallel/test-worker-non-fatal-uncaught-exception.js b/test/parallel/test-worker-non-fatal-uncaught-exception.js new file mode 100644 index 00000000000000..01df55eec1b478 --- /dev/null +++ b/test/parallel/test-worker-non-fatal-uncaught-exception.js @@ -0,0 +1,25 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const { Worker } = require('worker_threads'); + +// Check that `process._fatalException()` returns a boolean when run inside a +// worker. + +// Do not use isMainThread so that this test itself can be run inside a Worker. +if (!process.env.HAS_STARTED_WORKER) { + process.env.HAS_STARTED_WORKER = 1; + const w = new Worker(__filename); + w.on('exit', common.mustCall((code) => { + assert.strictEqual(code, 0); + })); + return; +} + +process.once('uncaughtException', () => { + process.nextTick(() => { + assert.strictEqual(res, true); + }); +}); + +const res = process._fatalException(new Error()); From ae461964a7dbee1d0c428914f851a0f5439178c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Reis?= Date: Thu, 19 Sep 2019 14:25:37 +0100 Subject: [PATCH 25/33] build,win: goto lint only after defining node_exe When running `vcbuild lint` on a new prompt where vcbuild was not run before, `%node_exe%` was not defined and `eslint.js`, `lint-js.js` and `lint-md.js` would be run directly using the program defined in Windows (usually the Windows Scripting Host or Notepad). This moves the goto statement to after `%node_exe%` is defined. Fixes: https://github.com/nodejs/node/issues/29602 PR-URL: https://github.com/nodejs/node/pull/29616 Reviewed-By: Ruben Bridgewater --- vcbuild.bat | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/vcbuild.bat b/vcbuild.bat index 86b2f1e3c9c550..72f20a48352b9a 100644 --- a/vcbuild.bat +++ b/vcbuild.bat @@ -152,10 +152,6 @@ goto next-arg :args-done -if "%*"=="lint" ( - goto lint-cpp -) - if defined build_release ( set config=Release set package=1 @@ -178,6 +174,9 @@ set "npm_exe="%~dp0%node_exe%" %~dp0deps\npm\bin\npm-cli.js" if "%target_env%"=="vs2017" set "node_gyp_exe=%node_gyp_exe% --msvs_version=2017" if "%target_env%"=="vs2019" set "node_gyp_exe=%node_gyp_exe% --msvs_version=2019" +:: skip building if the only argument received was lint +if "%*"=="lint" if exist "%node_exe%" goto lint-cpp + if "%config%"=="Debug" set configure_flags=%configure_flags% --debug if defined nosnapshot set configure_flags=%configure_flags% --without-snapshot if defined noetw set configure_flags=%configure_flags% --without-etw& set noetw_msi_arg=/p:NoETW=1 @@ -641,7 +640,7 @@ if not defined lint_cpp goto lint-js if defined NODEJS_MAKE goto run-make-lint where make > NUL 2>&1 && make -v | findstr /C:"GNU Make" 1> NUL if "%ERRORLEVEL%"=="0" set "NODEJS_MAKE=make PYTHON=python" & goto run-make-lint -where wsl > NUL 2>1 +where wsl > NUL 2>&1 if "%ERRORLEVEL%"=="0" set "NODEJS_MAKE=wsl make" & goto run-make-lint echo Could not find GNU Make, needed for linting C/C++ goto lint-js From 35e1d8c5ba4a8072fdb5a0140e0879f1933c249b Mon Sep 17 00:00:00 2001 From: Richard Lau Date: Thu, 26 Sep 2019 02:07:53 -0400 Subject: [PATCH 26/33] build: include deps/v8/test/torque in source tarball Builds from the source tarball were broken by the recent V8 upate to 7.7 as a file needed to build torque wasn't included in the source tarball as it resides in deps/v8/test. PR-URL: https://github.com/nodejs/node/pull/29712 Fixes: https://github.com/nodejs/node/issues/29709 Refs: https://github.com/nodejs/node/pull/28918 Reviewed-By: Ben Noordhuis Reviewed-By: Rod Vagg Reviewed-By: Beth Griggs --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5898541735289d..0a5177d1c3e7d6 100644 --- a/Makefile +++ b/Makefile @@ -1037,7 +1037,6 @@ $(TARBALL): release-only $(NODE_EXE) doc $(RM) -r $(TARNAME)/deps/uv/samples $(RM) -r $(TARNAME)/deps/uv/test $(RM) -r $(TARNAME)/deps/v8/samples - $(RM) -r $(TARNAME)/deps/v8/test $(RM) -r $(TARNAME)/deps/v8/tools/profviz $(RM) -r $(TARNAME)/deps/v8/tools/run-tests.py $(RM) -r $(TARNAME)/deps/zlib/contrib # too big, unused @@ -1049,6 +1048,8 @@ $(TARBALL): release-only $(NODE_EXE) doc $(RM) -r $(TARNAME)/tools/node_modules $(RM) -r $(TARNAME)/tools/osx-* $(RM) -r $(TARNAME)/tools/osx-pkg.pmdoc + find $(TARNAME)/deps/v8/test/* -type d ! -regex '.*/test/torque$$' | xargs $(RM) -r + find $(TARNAME)/deps/v8/test -type f ! -regex '.*/test/torque/.*' | xargs $(RM) find $(TARNAME)/ -name ".eslint*" -maxdepth 2 | xargs $(RM) find $(TARNAME)/ -type l | xargs $(RM) # annoying on windows tar -cf $(TARNAME).tar $(TARNAME) From 0041f1c0d3c32d1e4c19c2d19d71edb8bb3acff4 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Mon, 23 Sep 2019 16:03:26 -0700 Subject: [PATCH 27/33] doc: sync security policy with nodejs.org The Node.js security disclosure policy has diverged between the website and github: - https://nodejs.org/en/security/ - https://github.com/nodejs/node/security/policy The website is more recent and accurate, so sync the content from: - https://github.com/nodejs/nodejs.org/blob/master/locale/en/security.md PR-URL: https://github.com/nodejs/node/pull/29682 Reviewed-By: James M Snell Reviewed-By: Matteo Collina Reviewed-By: Luigi Pinca --- SECURITY.md | 90 +++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 64 insertions(+), 26 deletions(-) diff --git a/SECURITY.md b/SECURITY.md index a82c5f48ceac12..7e984b7ba36872 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -1,37 +1,75 @@ # Security -If you find a security vulnerability in Node.js, please report it to -security@nodejs.org. Please withhold public disclosure until after the security -team has addressed the vulnerability. +## Reporting a Bug in Node.js -The security team will acknowledge your email within 24 hours. You will receive -a more detailed response within 48 hours. +Report security bugs in Node.js via [HackerOne](https://hackerone.com/nodejs). -There are no hard and fast rules to determine if a bug is worth reporting as a -security issue. Here are some examples of past issues and what the Security -Response Team thinks of them. When in doubt, please do send us a report -nonetheless. +Your report will be acknowledged within 24 hours, and you’ll receive a more +detailed response to your report within 48 hours indicating the next steps in +handling your submission. -## Public disclosure preferred +After the initial reply to your report, the security team will endeavor to keep +you informed of the progress being made towards a fix and full announcement, +and may ask for additional information or guidance surrounding the reported +issue. These updates will be sent at least every five days; in practice, this +is more likely to be every 24-48 hours. -* [#14519](https://github.com/nodejs/node/issues/14519): _Internal domain - function can be used to cause segfaults_. Requires the ability to execute - arbitrary JavaScript code. That is already the highest level of privilege - possible. +### Node.js Bug Bounty Program -## Private disclosure preferred +The Node.js project engages in an official bug bounty program for security +researchers and responsible public disclosures. The program is managed through +the HackerOne platform. See for further details. -* [CVE-2016-7099](https://nodejs.org/en/blog/vulnerability/september-2016-security-releases/): - _Fix invalid wildcard certificate validation check_. This was a high-severity - defect. It caused Node.js TLS clients to accept invalid wildcard certificates. +## Reporting a Bug in a third party module -* [#5507](https://github.com/nodejs/node/pull/5507): _Fix a defect that makes - the CacheBleed Attack possible_. Many, though not all, OpenSSL vulnerabilities - in the TLS/SSL protocols also affect Node.js. +Security bugs in third party modules should be reported to their respective +maintainers and should also be coordinated through the Node Ecosystem Security +Team via [HackerOne](https://hackerone.com/nodejs-ecosystem). -* [CVE-2016-2216](https://nodejs.org/en/blog/vulnerability/february-2016-security-releases/): - _Fix defects in HTTP header parsing for requests and responses that can allow - response splitting_. This was a remotely-exploitable defect in the Node.js - HTTP implementation. +Details regarding this process can be found in the +[Security Working Group repository](https://github.com/nodejs/security-wg/blob/master/processes/third_party_vuln_process.md). -When in doubt, please do send us a report. +Thank you for improving the security of Node.js and its ecosystem. Your efforts +and responsible disclosure are greatly appreciated and will be acknowledged. + +## Disclosure Policy + +Here is the security disclosure policy for Node.js + +* The security report is received and is assigned a primary handler. This + person will coordinate the fix and release process. The problem is confirmed + and a list of all affected versions is determined. Code is audited to find + any potential similar problems. Fixes are prepared for all releases which are + still under maintenance. These fixes are not committed to the public + repository but rather held locally pending the announcement. + +* A suggested embargo date for this vulnerability is chosen and a CVE (Common + Vulnerabilities and Exposures (CVE®)) is requested for the vulnerability. + +* On the embargo date, the Node.js security mailing list is sent a copy of the + announcement. The changes are pushed to the public repository and new builds + are deployed to nodejs.org. Within 6 hours of the mailing list being + notified, a copy of the advisory will be published on the Node.js blog. + +* Typically the embargo date will be set 72 hours from the time the CVE is + issued. However, this may vary depending on the severity of the bug or + difficulty in applying a fix. + +* This process can take some time, especially when coordination is required + with maintainers of other projects. Every effort will be made to handle the + bug in as timely a manner as possible; however, it’s important that we follow + the release process above to ensure that the disclosure is handled in a + consistent manner. + +## Receiving Security Updates + +Security notifications will be distributed via the following methods. + +* +* + +## Comments on this Policy + +If you have suggestions on how this process could be improved please submit a +[pull request](https://github.com/nodejs/nodejs.org) or +[file an issue](https://github.com/nodejs/security-wg/issues/new) to discuss. From 69f26340e9814a37b205b0c31aaa10c3de28617b Mon Sep 17 00:00:00 2001 From: cjihrig Date: Wed, 25 Sep 2019 10:49:13 -0400 Subject: [PATCH 28/33] tls: simplify setSecureContext() option parsing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The following pattern is redundant, so remove it: if (options.foo !== undefined) this.foo = options.foo; else this.foo = undefined; PR-URL: https://github.com/nodejs/node/pull/29704 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Richard Lau Reviewed-By: Sam Roberts Reviewed-By: Luigi Pinca Reviewed-By: Ruben Bridgewater Reviewed-By: Minwoo Jung Reviewed-By: Tobias Nießen Reviewed-By: Rich Trott --- lib/_tls_wrap.js | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index 63115d59b856ba..d29182d585779b 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -1114,20 +1114,14 @@ Server.prototype.setSecureContext = function(options) { else this.crl = undefined; - if (options.sigalgs !== undefined) - this.sigalgs = options.sigalgs; - else - this.sigalgs = undefined; + this.sigalgs = options.sigalgs; if (options.ciphers) this.ciphers = options.ciphers; else this.ciphers = undefined; - if (options.ecdhCurve !== undefined) - this.ecdhCurve = options.ecdhCurve; - else - this.ecdhCurve = undefined; + this.ecdhCurve = options.ecdhCurve; if (options.dhparam) this.dhparam = options.dhparam; From d1f4befd09b74f9f39f14871b77c27f04c004b6b Mon Sep 17 00:00:00 2001 From: Guy Bedford Date: Thu, 26 Sep 2019 23:20:09 -0400 Subject: [PATCH 29/33] module: pass full URL to loader for top-level load PR-URL: https://github.com/nodejs/node/pull/29736 Reviewed-By: Bradley Farias Reviewed-By: David Carlier --- lib/internal/modules/cjs/loader.js | 2 +- test/fixtures/es-module-loaders/example-loader.mjs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/internal/modules/cjs/loader.js b/lib/internal/modules/cjs/loader.js index 034938e56a2d6a..eab006935b0cad 100644 --- a/lib/internal/modules/cjs/loader.js +++ b/lib/internal/modules/cjs/loader.js @@ -1001,7 +1001,7 @@ Module.runMain = function() { // Load the main module--the command line argument. if (experimentalModules) { asyncESM.loaderPromise.then((loader) => { - return loader.import(pathToFileURL(process.argv[1]).pathname); + return loader.import(pathToFileURL(process.argv[1]).href); }) .catch((e) => { internalBinding('errors').triggerUncaughtException( diff --git a/test/fixtures/es-module-loaders/example-loader.mjs b/test/fixtures/es-module-loaders/example-loader.mjs index d8e0ddcba30699..ed5b0d9be5940d 100644 --- a/test/fixtures/es-module-loaders/example-loader.mjs +++ b/test/fixtures/es-module-loaders/example-loader.mjs @@ -15,11 +15,11 @@ export function resolve(specifier, parentModuleURL = baseURL /*, defaultResolve format: 'builtin' }; } - if (/^\.{0,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) { + if (/^\.{1,2}[/]/.test(specifier) !== true && !specifier.startsWith('file:')) { // For node_modules support: // return defaultResolve(specifier, parentModuleURL); throw new Error( - `imports must begin with '/', './', or '../'; '${specifier}' does not`); + `imports must be URLs or begin with './', or '../'; '${specifier}' does not`); } const resolved = new url.URL(specifier, parentModuleURL); const ext = path.extname(resolved.pathname); From 298d92785c9363a01d42374a6de65fc02558653c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Fri, 27 Sep 2019 17:21:43 +0200 Subject: [PATCH 30/33] deps: enable unit data in small-icu The data are needed for new Intl.NumberFormat options added by V8. Fixes: https://github.com/nodejs/node/issues/29734 PR-URL: https://github.com/nodejs/node/pull/29735 Reviewed-By: Richard Lau Reviewed-By: Colin Ihrig Reviewed-By: Steven R Loomis Reviewed-By: James M Snell Reviewed-By: Minwoo Jung --- deps/icu-small/source/data/in/icudt64l.dat | Bin 2879744 -> 2984688 bytes tools/icu/icu_small.json | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/icu-small/source/data/in/icudt64l.dat b/deps/icu-small/source/data/in/icudt64l.dat index 113b88a48048055426a004b008bdf144aece6ec3..2ff9d277c58be3081797ad5651c7c3c271af4571 100644 GIT binary patch delta 102271 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 Date: Tue, 24 Sep 2019 23:00:23 -0700 Subject: [PATCH 31/33] test: fix flaky test-cluster-net-listen-ipv6only-none test-cluster-net-listen-ipv6only-none was using port `0` for an IPv6-only operation and assuming that the operating system would supply a port that was also available in IPv4. However, CI results seem to indicate that a port can be supplied that is in use by IPv4 but available to IPv6, resulting in the test failing. Use `common.PORT` to avoid this issue. Fixes: https://github.com/nodejs/node/issues/29679 PR-URL: https://github.com/nodejs/node/pull/29681 Reviewed-By: Sam Roberts --- .../test-cluster-net-listen-ipv6only-none.js | 21 +++++++++---------- 1 file changed, 10 insertions(+), 11 deletions(-) rename test/{parallel => sequential}/test-cluster-net-listen-ipv6only-none.js (67%) diff --git a/test/parallel/test-cluster-net-listen-ipv6only-none.js b/test/sequential/test-cluster-net-listen-ipv6only-none.js similarity index 67% rename from test/parallel/test-cluster-net-listen-ipv6only-none.js rename to test/sequential/test-cluster-net-listen-ipv6only-none.js index 401afbc035e36a..d520b7f25ccf30 100644 --- a/test/parallel/test-cluster-net-listen-ipv6only-none.js +++ b/test/sequential/test-cluster-net-listen-ipv6only-none.js @@ -17,13 +17,16 @@ const WORKER_ACCOUNT = 3; if (cluster.isMaster) { const workers = new Map(); - let address; const countdown = new Countdown(WORKER_ACCOUNT, () => { - // Make sure the `ipv6Only` option works. + // Make sure the `ipv6Only` option works. This is the part of the test that + // requires the whole test to use `common.PORT` rather than port `0`. If it + // used port `0` instead, then the operating system can supply a port that + // is available for the IPv6 interface but in use by the IPv4 interface. + // Refs: https://github.com/nodejs/node/issues/29679 const server = net.createServer().listen({ host: '0.0.0.0', - port: address.port, + port: common.PORT, }, common.mustCall(() => { // Exit. server.close(); @@ -37,13 +40,9 @@ if (cluster.isMaster) { const worker = cluster.fork().on('exit', common.mustCall((statusCode) => { assert.strictEqual(statusCode, 0); })).on('listening', common.mustCall((workerAddress) => { - if (!address) { - address = workerAddress; - } else { - assert.strictEqual(address.addressType, workerAddress.addressType); - assert.strictEqual(address.host, workerAddress.host); - assert.strictEqual(address.port, workerAddress.port); - } + assert.strictEqual(workerAddress.addressType, 6); + assert.strictEqual(workerAddress.address, host); + assert.strictEqual(workerAddress.port, common.PORT); countdown.dec(); })); @@ -52,7 +51,7 @@ if (cluster.isMaster) { } else { net.createServer().listen({ host, - port: 0, + port: common.PORT, ipv6Only: true, }, common.mustCall()); } From c3a1303bc2fbc2d2fe7d8b7f34d02bf2a040dacd Mon Sep 17 00:00:00 2001 From: Alex Aubuchon Date: Sat, 28 Sep 2019 12:51:15 -0400 Subject: [PATCH 32/33] src: rename --loader to --experimental-loader Renames the `--loader` cli argument to `--experimental-loader`. This is to clearly indicate the esm loader feature as experimental even after esm is no longer experimental. Also minorly alters the `--experimental-loader` docs to say that the passed loader can be an esm module. Refs: https://github.com/nodejs/modules/issues/351#issuecomment-535189524 PR-URL: https://github.com/nodejs/node/pull/29752 Reviewed-By: Guy Bedford Reviewed-By: Anna Henningsen Reviewed-By: Luigi Pinca Reviewed-By: David Carlier Reviewed-By: James M Snell Reviewed-By: Colin Ihrig --- doc/api/cli.md | 7 ++++--- doc/api/esm.md | 4 ++-- doc/node.1 | 4 ++-- lib/internal/bootstrap/pre_execution.js | 8 ++++---- src/node_options.cc | 14 ++++++++------ test/es-module/test-esm-example-loader.js | 2 +- test/es-module/test-esm-loader-dependency.mjs | 2 +- test/es-module/test-esm-loader-invalid-format.mjs | 2 +- test/es-module/test-esm-loader-invalid-url.mjs | 2 +- ...esm-loader-missing-dynamic-instantiate-hook.mjs | 2 +- test/es-module/test-esm-named-exports.mjs | 2 +- .../test-esm-preserve-symlinks-not-found-plain.mjs | 2 +- .../test-esm-preserve-symlinks-not-found.mjs | 2 +- test/es-module/test-esm-resolve-hook.mjs | 2 +- test/es-module/test-esm-shared-loader-dep.mjs | 2 +- .../test-loaders-unknown-builtin-module.mjs | 2 +- ...est-process-env-allowed-flags-are-documented.js | 1 + 17 files changed, 32 insertions(+), 28 deletions(-) diff --git a/doc/api/cli.md b/doc/api/cli.md index 6bc82659e48a3f..0ac58dba3510fb 100644 --- a/doc/api/cli.md +++ b/doc/api/cli.md @@ -395,12 +395,13 @@ Specify ways of the inspector web socket url exposure. By default inspector websocket url is available in stderr and under `/json/list` endpoint on `http://host:port/json/list`. -### `--loader=file` +### `--experimental-loader=module` -Specify the `file` of the custom [experimental ECMAScript Module][] loader. +Specify the `module` of a custom [experimental ECMAScript Module][] loader. +`module` may be either a path to a file, or an ECMAScript Module name. ### `--max-http-header-size=size` To customize the default module resolution, loader hooks can optionally be -provided via a `--loader ./loader-name.mjs` argument to Node.js. +provided via a `--experimental-loader ./loader-name.mjs` argument to Node.js. When hooks are used they only apply to ES module loading and not to any CommonJS modules loaded. @@ -731,7 +731,7 @@ export async function resolve(specifier, With this loader, running: ```console -NODE_OPTIONS='--experimental-modules --loader ./custom-loader.mjs' node x.js +NODE_OPTIONS='--experimental-modules --experimental-loader ./custom-loader.mjs' node x.js ``` would load the module `x.js` as an ES module with relative resolution support diff --git a/doc/node.1 b/doc/node.1 index 0c8de4b75f6b57..ee0647ad6993e3 100644 --- a/doc/node.1 +++ b/doc/node.1 @@ -200,9 +200,9 @@ Default is V8 Inspector integration allows attaching Chrome DevTools and IDEs to Node.js instances for debugging and profiling. It uses the Chrome DevTools Protocol. . -.It Fl -loader Ns = Ns Ar file +.It Fl -experimental-loader Ns = Ns Ar module Specify the -.Ar file +.Ar module as a custom loader, to load .Fl -experimental-modules . . diff --git a/lib/internal/bootstrap/pre_execution.js b/lib/internal/bootstrap/pre_execution.js index 6dd69c0c9b7888..79f1d97fbb306d 100644 --- a/lib/internal/bootstrap/pre_execution.js +++ b/lib/internal/bootstrap/pre_execution.js @@ -400,12 +400,12 @@ function initializeESMLoader() { // track of for different ESM modules. setInitializeImportMetaObjectCallback(esm.initializeImportMetaObject); setImportModuleDynamicallyCallback(esm.importModuleDynamicallyCallback); - const userLoader = getOptionValue('--loader'); - // If --loader is specified, create a loader with user hooks. Otherwise - // create the default loader. + const userLoader = getOptionValue('--experimental-loader'); + // If --experimental-loader is specified, create a loader with user hooks. + // Otherwise create the default loader. if (userLoader) { const { emitExperimentalWarning } = require('internal/util'); - emitExperimentalWarning('--loader'); + emitExperimentalWarning('--experimental-loader'); } esm.initializeLoader(process.cwd(), userLoader); } diff --git a/src/node_options.cc b/src/node_options.cc index 98049453d8b24e..570603140abef4 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -114,7 +114,8 @@ void PerIsolateOptions::CheckOptions(std::vector* errors) { void EnvironmentOptions::CheckOptions(std::vector* errors) { if (!userland_loader.empty() && !experimental_modules) { - errors->push_back("--loader requires --experimental-modules be enabled"); + errors->push_back("--experimental-loader requires " + "--experimental-modules be enabled"); } if (has_policy_integrity_string && experimental_policy.empty()) { errors->push_back("--policy-integrity requires " @@ -315,6 +316,12 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { "experimental support for exports in package.json", &EnvironmentOptions::experimental_exports, kAllowedInEnvironment); + AddOption("--experimental-loader", + "(with --experimental-modules) use the specified file as a " + "custom loader", + &EnvironmentOptions::userland_loader, + kAllowedInEnvironment); + AddAlias("--loader", "--experimental-loader"); AddOption("--experimental-modules", "experimental ES Module support and caching modules", &EnvironmentOptions::experimental_modules, @@ -376,11 +383,6 @@ EnvironmentOptionsParser::EnvironmentOptionsParser() { "set module type for string input", &EnvironmentOptions::module_type, kAllowedInEnvironment); - AddOption("--loader", - "(with --experimental-modules) use the specified file as a " - "custom loader", - &EnvironmentOptions::userland_loader, - kAllowedInEnvironment); AddOption("--es-module-specifier-resolution", "Select extension resolution algorithm for es modules; " "either 'explicit' (default) or 'node'", diff --git a/test/es-module/test-esm-example-loader.js b/test/es-module/test-esm-example-loader.js index c3ba95f2280857..0da1d34d2ad6fc 100644 --- a/test/es-module/test-esm-example-loader.js +++ b/test/es-module/test-esm-example-loader.js @@ -1,4 +1,4 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/example-loader.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/example-loader.mjs /* eslint-disable node-core/require-common-first, node-core/required-modules */ import assert from 'assert'; import ok from '../fixtures/es-modules/test-esm-ok.mjs'; diff --git a/test/es-module/test-esm-loader-dependency.mjs b/test/es-module/test-esm-loader-dependency.mjs index 9cb2856009618a..dadc3bd84ae1d3 100644 --- a/test/es-module/test-esm-loader-dependency.mjs +++ b/test/es-module/test-esm-loader-dependency.mjs @@ -1,4 +1,4 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-with-dep.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/loader-with-dep.mjs /* eslint-disable node-core/require-common-first, node-core/required-modules */ import '../fixtures/es-modules/test-esm-ok.mjs'; diff --git a/test/es-module/test-esm-loader-invalid-format.mjs b/test/es-module/test-esm-loader-invalid-format.mjs index e4e4e30f5cc2e8..9e26d646d479a1 100644 --- a/test/es-module/test-esm-loader-invalid-format.mjs +++ b/test/es-module/test-esm-loader-invalid-format.mjs @@ -1,4 +1,4 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-invalid-format.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/loader-invalid-format.mjs import { expectsError, mustCall } from '../common/index.mjs'; import assert from 'assert'; diff --git a/test/es-module/test-esm-loader-invalid-url.mjs b/test/es-module/test-esm-loader-invalid-url.mjs index 44bacf9347c840..f42900c58e049c 100644 --- a/test/es-module/test-esm-loader-invalid-url.mjs +++ b/test/es-module/test-esm-loader-invalid-url.mjs @@ -1,4 +1,4 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-invalid-url.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/loader-invalid-url.mjs import { expectsError, mustCall } from '../common/index.mjs'; import assert from 'assert'; diff --git a/test/es-module/test-esm-loader-missing-dynamic-instantiate-hook.mjs b/test/es-module/test-esm-loader-missing-dynamic-instantiate-hook.mjs index 50fbf0c83ecea9..5767af7affe1fa 100644 --- a/test/es-module/test-esm-loader-missing-dynamic-instantiate-hook.mjs +++ b/test/es-module/test-esm-loader-missing-dynamic-instantiate-hook.mjs @@ -1,4 +1,4 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/missing-dynamic-instantiate-hook.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/missing-dynamic-instantiate-hook.mjs import { expectsError } from '../common/index.mjs'; import('test').catch(expectsError({ diff --git a/test/es-module/test-esm-named-exports.mjs b/test/es-module/test-esm-named-exports.mjs index 8b7c429b3d802d..6c8030826970a8 100644 --- a/test/es-module/test-esm-named-exports.mjs +++ b/test/es-module/test-esm-named-exports.mjs @@ -1,4 +1,4 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/builtin-named-exports-loader.mjs import '../common/index.mjs'; import { readFile } from 'fs'; import assert from 'assert'; diff --git a/test/es-module/test-esm-preserve-symlinks-not-found-plain.mjs b/test/es-module/test-esm-preserve-symlinks-not-found-plain.mjs index b9b2860dffa069..1dcae4b8aef4a8 100644 --- a/test/es-module/test-esm-preserve-symlinks-not-found-plain.mjs +++ b/test/es-module/test-esm-preserve-symlinks-not-found-plain.mjs @@ -1,3 +1,3 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/not-found-assert-loader.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/not-found-assert-loader.mjs /* eslint-disable node-core/require-common-first, node-core/required-modules */ import './not-found.js'; diff --git a/test/es-module/test-esm-preserve-symlinks-not-found.mjs b/test/es-module/test-esm-preserve-symlinks-not-found.mjs index 1dbdfa03e69139..68e1b53eeb1d75 100644 --- a/test/es-module/test-esm-preserve-symlinks-not-found.mjs +++ b/test/es-module/test-esm-preserve-symlinks-not-found.mjs @@ -1,3 +1,3 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/not-found-assert-loader.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/not-found-assert-loader.mjs /* eslint-disable node-core/require-common-first, node-core/required-modules */ import './not-found.mjs'; diff --git a/test/es-module/test-esm-resolve-hook.mjs b/test/es-module/test-esm-resolve-hook.mjs index bbf6c80cdab344..00c8e440f42964 100644 --- a/test/es-module/test-esm-resolve-hook.mjs +++ b/test/es-module/test-esm-resolve-hook.mjs @@ -1,4 +1,4 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/js-loader.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/js-loader.mjs /* eslint-disable node-core/require-common-first, node-core/required-modules */ import { namedExport } from '../fixtures/es-module-loaders/js-as-esm.js'; import assert from 'assert'; diff --git a/test/es-module/test-esm-shared-loader-dep.mjs b/test/es-module/test-esm-shared-loader-dep.mjs index 00ba1ec31a226a..b02e557d34bc29 100644 --- a/test/es-module/test-esm-shared-loader-dep.mjs +++ b/test/es-module/test-esm-shared-loader-dep.mjs @@ -1,4 +1,4 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-shared-dep.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/loader-shared-dep.mjs import { createRequire } from '../common/index.mjs'; import assert from 'assert'; diff --git a/test/parallel/test-loaders-unknown-builtin-module.mjs b/test/parallel/test-loaders-unknown-builtin-module.mjs index b7d815c812ce3f..b0b1d400e6904e 100644 --- a/test/parallel/test-loaders-unknown-builtin-module.mjs +++ b/test/parallel/test-loaders-unknown-builtin-module.mjs @@ -1,4 +1,4 @@ -// Flags: --experimental-modules --loader ./test/fixtures/es-module-loaders/loader-unknown-builtin-module.mjs +// Flags: --experimental-modules --experimental-loader ./test/fixtures/es-module-loaders/loader-unknown-builtin-module.mjs import { expectsError, mustCall } from '../common/index.mjs'; import assert from 'assert'; diff --git a/test/parallel/test-process-env-allowed-flags-are-documented.js b/test/parallel/test-process-env-allowed-flags-are-documented.js index a60f6bbecf69cf..2e0d67eefcb242 100644 --- a/test/parallel/test-process-env-allowed-flags-are-documented.js +++ b/test/parallel/test-process-env-allowed-flags-are-documented.js @@ -87,6 +87,7 @@ const undocumented = difference(process.allowedNodeEnvironmentFlags, assert(undocumented.delete('--debug-arraybuffer-allocations')); assert(undocumented.delete('--experimental-worker')); assert(undocumented.delete('--no-node-snapshot')); +assert(undocumented.delete('--loader')); assert.strictEqual(undocumented.size, 0, 'The following options are not documented as allowed in ' + From 8507485fb242dfcaf07092414871aa9c185a28e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Tue, 1 Oct 2019 15:01:26 +0200 Subject: [PATCH 33/33] 2019-10-01, Version 12.11.1 (Current) Notable changes: * build: * This release fixes a regression that prevented from building Node.js using the official source tarball. https://github.com/nodejs/node/pull/29712 * deps: * Updated small-icu data to support "unit" style in the `Intl.NumberFormat` API. https://github.com/nodejs/node/pull/29735 PR-URL: https://github.com/nodejs/node/pull/29796 --- CHANGELOG.md | 3 ++- doc/changelogs/CHANGELOG_V12.md | 47 +++++++++++++++++++++++++++++++++ src/node_version.h | 2 +- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c6b3fd29f2cf48..b6e21279f63122 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,8 @@ release. -12.11.0
+12.11.1
+12.11.0
12.10.0
12.9.1
12.9.0
diff --git a/doc/changelogs/CHANGELOG_V12.md b/doc/changelogs/CHANGELOG_V12.md index 78fe2cc7c79b59..b8e28d10cbd5a8 100644 --- a/doc/changelogs/CHANGELOG_V12.md +++ b/doc/changelogs/CHANGELOG_V12.md @@ -9,6 +9,7 @@ +12.11.1
12.11.0
12.10.0
12.9.1
@@ -42,6 +43,52 @@ * [io.js](CHANGELOG_IOJS.md) * [Archive](CHANGELOG_ARCHIVE.md) + +## 2019-10-01, Version 12.11.1 (Current), @targos + +### Notable changes + +* **build**: + * This release fixes a regression that prevented from building Node.js using + the official source tarball (Richard Lau) [#29712](https://github.com/nodejs/node/pull/29712). +* **deps**: + * Updated small-icu data to support "unit" style in the `Intl.NumberFormat` API (Michaël Zasso) [#29735](https://github.com/nodejs/node/pull/29735). + +### Commits + +* [[`35e1d8c5ba`](https://github.com/nodejs/node/commit/35e1d8c5ba)] - **build**: include deps/v8/test/torque in source tarball (Richard Lau) [#29712](https://github.com/nodejs/node/pull/29712) +* [[`ae461964a7`](https://github.com/nodejs/node/commit/ae461964a7)] - **build,win**: goto lint only after defining node\_exe (João Reis) [#29616](https://github.com/nodejs/node/pull/29616) +* [[`588b388181`](https://github.com/nodejs/node/commit/588b388181)] - **crypto**: use byteLength in timingSafeEqual (Tobias Nießen) [#29657](https://github.com/nodejs/node/pull/29657) +* [[`298d92785c`](https://github.com/nodejs/node/commit/298d92785c)] - **deps**: enable unit data in small-icu (Michaël Zasso) [#29735](https://github.com/nodejs/node/pull/29735) +* [[`0041f1c0d3`](https://github.com/nodejs/node/commit/0041f1c0d3)] - **doc**: sync security policy with nodejs.org (Sam Roberts) [#29682](https://github.com/nodejs/node/pull/29682) +* [[`038cbb08de`](https://github.com/nodejs/node/commit/038cbb08de)] - **doc**: fix output in inspector HeapProfile example (Kirill Fomichev) [#29711](https://github.com/nodejs/node/pull/29711) +* [[`d86f10cf0b`](https://github.com/nodejs/node/commit/d86f10cf0b)] - **doc**: add KeyObject to type for crypto.createDecipheriv() argument (exoego) [#29689](https://github.com/nodejs/node/pull/29689) +* [[`1303e3551f`](https://github.com/nodejs/node/commit/1303e3551f)] - **doc**: clarify description of `readable.push()` method (imhype) [#29687](https://github.com/nodejs/node/pull/29687) +* [[`d258e0242c`](https://github.com/nodejs/node/commit/d258e0242c)] - **doc**: clarify stream errors while reading and writing (Robert Nagy) [#29653](https://github.com/nodejs/node/pull/29653) +* [[`0fc85ff96a`](https://github.com/nodejs/node/commit/0fc85ff96a)] - **doc**: specify `display=fallback` for Google Fonts (XhmikosR) [#29688](https://github.com/nodejs/node/pull/29688) +* [[`c2791dcd9c`](https://github.com/nodejs/node/commit/c2791dcd9c)] - **doc**: fix some recent nits (Vse Mozhet Byt) [#29670](https://github.com/nodejs/node/pull/29670) +* [[`7a6b05a26f`](https://github.com/nodejs/node/commit/7a6b05a26f)] - **doc**: fix 404 links (XhmikosR) [#29661](https://github.com/nodejs/node/pull/29661) +* [[`2b76cb6dda`](https://github.com/nodejs/node/commit/2b76cb6dda)] - **doc**: remove align from tables (XhmikosR) [#29668](https://github.com/nodejs/node/pull/29668) +* [[`3de1fc6958`](https://github.com/nodejs/node/commit/3de1fc6958)] - **doc**: document that iv may be null when using createCipheriv() (Ruben Bridgewater) [#29684](https://github.com/nodejs/node/pull/29684) +* [[`91e4cc7500`](https://github.com/nodejs/node/commit/91e4cc7500)] - **doc**: update AUTHORS list (Anna Henningsen) [#29608](https://github.com/nodejs/node/pull/29608) +* [[`2ea4cc0732`](https://github.com/nodejs/node/commit/2ea4cc0732)] - **doc**: clarify pipeline stream cleanup (Robert Nagy) [#29738](https://github.com/nodejs/node/pull/29738) +* [[`ab060bfdab`](https://github.com/nodejs/node/commit/ab060bfdab)] - **doc**: clarify fs.symlink() usage (Simon A. Eugster) [#29700](https://github.com/nodejs/node/pull/29700) +* [[`b5c24dfbe8`](https://github.com/nodejs/node/commit/b5c24dfbe8)] - **doc**: fix type of atime/mtime (TATSUNO Yasuhiro) [#29666](https://github.com/nodejs/node/pull/29666) +* [[`6579b1a547`](https://github.com/nodejs/node/commit/6579b1a547)] - **doc,http**: indicate callback is optional for message.setTimeout() (Trivikram Kamat) [#29654](https://github.com/nodejs/node/pull/29654) +* [[`a04fc86723`](https://github.com/nodejs/node/commit/a04fc86723)] - **http2**: optimize the altsvc Max bytes limit, define and use constants (rickyes) [#29673](https://github.com/nodejs/node/pull/29673) +* [[`d1f4befd09`](https://github.com/nodejs/node/commit/d1f4befd09)] - **module**: pass full URL to loader for top-level load (Guy Bedford) [#29736](https://github.com/nodejs/node/pull/29736) +* [[`3f028551a8`](https://github.com/nodejs/node/commit/3f028551a8)] - **module**: move cjs type check behind flag (Guy Bedford) [#29732](https://github.com/nodejs/node/pull/29732) +* [[`c3a1303bc2`](https://github.com/nodejs/node/commit/c3a1303bc2)] - **src**: rename --loader to --experimental-loader (Alex Aubuchon) [#29752](https://github.com/nodejs/node/pull/29752) +* [[`17c3478d78`](https://github.com/nodejs/node/commit/17c3478d78)] - **src**: fix asan build for gcc/clang (David Carlier) [#29383](https://github.com/nodejs/node/pull/29383) +* [[`64740d44b5`](https://github.com/nodejs/node/commit/64740d44b5)] - **src**: fix compiler warning in inspector\_profiler.cc (Daniel Bevenius) [#29660](https://github.com/nodejs/node/pull/29660) +* [[`a86b71f745`](https://github.com/nodejs/node/commit/a86b71f745)] - **src**: disconnect inspector before exiting out of fatal exception (Joyee Cheung) [#29611](https://github.com/nodejs/node/pull/29611) +* [[`8d88010277`](https://github.com/nodejs/node/commit/8d88010277)] - **src**: try showing stack traces when process.\_fatalException is not set (Joyee Cheung) [#29624](https://github.com/nodejs/node/pull/29624) +* [[`2a6b7b0476`](https://github.com/nodejs/node/commit/2a6b7b0476)] - **test**: fix flaky test-cluster-net-listen-ipv6only-none (Rich Trott) [#29681](https://github.com/nodejs/node/pull/29681) +* [[`69f26340e9`](https://github.com/nodejs/node/commit/69f26340e9)] - **tls**: simplify setSecureContext() option parsing (cjihrig) [#29704](https://github.com/nodejs/node/pull/29704) +* [[`c361180c07`](https://github.com/nodejs/node/commit/c361180c07)] - **tools**: make mailmap processing for author list case-insensitive (Anna Henningsen) [#29608](https://github.com/nodejs/node/pull/29608) +* [[`ef033d046a`](https://github.com/nodejs/node/commit/ef033d046a)] - **worker**: fix process.\_fatalException return type (Ruben Bridgewater) [#29706](https://github.com/nodejs/node/pull/29706) +* [[`04df7dbadb`](https://github.com/nodejs/node/commit/04df7dbadb)] - **worker**: keep allocators for transferred SAB instances alive longer (Anna Henningsen) [#29637](https://github.com/nodejs/node/pull/29637) + ## 2019-09-25, Version 12.11.0 (Current), @BridgeAR diff --git a/src/node_version.h b/src/node_version.h index 87f22c0cf25834..d49c8454561fc8 100644 --- a/src/node_version.h +++ b/src/node_version.h @@ -29,7 +29,7 @@ #define NODE_VERSION_IS_LTS 0 #define NODE_VERSION_LTS_CODENAME "" -#define NODE_VERSION_IS_RELEASE 0 +#define NODE_VERSION_IS_RELEASE 1 #ifndef NODE_STRINGIFY #define NODE_STRINGIFY(n) NODE_STRINGIFY_HELPER(n)