Node.js 6.10.1 Release Brief
This routine monthly patch release for the Node 6 LTS line comes with significant performance improvements across 9 APIs, with an average of up to 39% perf increase across 8 APIs and one outlier at up to 28x faster.
Aside from performance, large heap statistics are now enabled and a variety of bugs have been squashed.
As with all releases within major version lines, minor and patch upgrades should be drop-in replacements for previous versions.
Overview
Of a total of 297 commits:
- 79 were documentation-only commits.
- 123 only modify tests and 7 only affect internal tooling.
- 5 patches were backported from upstream V8:
- [
dfb8d33
as3ab070d4e1
- (Michaël Zasso) #11483 - [
a814b8a
as3fc6a2247f
- (ishell@chromium.org) #10733 - [
73ee7943
as254cb1cb77
- (Ben Noordhuis) #9293 - [
306c412c
ase774de1685
- (Ben Noordhuis) #9293 - [
fd1ffe4f5a
] - fix--always-opt
bug (Ben Noordhuis) #9293
- [
- One patch was floated onto V8:
- [
2e15d48447
] - dropv8::FunctionCallbackInfo<T>::NewTarget()
(Ben Noordhuis) #9293
- [
The remaining significant commits are as follows:
- [
fb75bed078
] - assert: unlock the assert API (Rich Trott) #11304 - [
32b264c33b
] - assert: remove unneeded condition (Rich Trott) #11314 - [
a0c705ef79
] - assert: apply minor refactoring (Rich Trott) #11511 - [
7ecfe4971a
] - assert: update comments (Kai Cataldo) #10579 - [
4d6fa8d040
] - benchmark: add more thorough timers benchmarks (Jeremiah Senkpiel) #10925 - [
406e623b13
] - benchmark: add benchmark for object properties (Michaël Zasso) #10949 - [
7ee04c6015
] - benchmark: don't lint autogenerated modules (Brian White) #10756 - [
d22d7cce7c
] - benchmark: move punycode benchmark out of net (Brian White) #10446 - [
6b361611c3
] - benchmark: movesetImmediate
benchmarks to timers (Joshua Colvin) #11010 - [
a469ce5826
] - benchmark: addassert.deep\[Strict\]Equal
benchmarks (Joyee Cheung) #11092 - [
eca1e80722
] - benchmark: add dgram bind(+/- params) benchmark (Vse Mozhet Byt) #11313 - [
06c339dcce
] - benchmark: improve readability of net benchmarks (Brian White) #10446 - [
b4cf8c4036
] - benchmark,lib,test: adjust for linting (Rich Trott) #10561 - [
e397e6f94a
] - buffer: improvecompare()
performance (Brian White) #10927 - [
2b52859535
] - buffer: fix comments inbidirectionalIndexOf
(dcposch@dcpos.ch) #10162 - [
f7879d98f8
] - buffer: improvetoJSON()
performance (Brian White) #10895 - [
f83d035c50
] - buffer: convert offset & length to int properly (Sakthipriyan Vairamani (thefourtheye)) #11176 - [
cda593774f
] - build: sort sources alphabetically (Daniel Bevenius) #10892 - [
2d31fd8bf7
] - build: move source files from headers section (Daniel Bevenius) #10850 - [
b7c5295437
] - build: don't squash signal handlers with--shared
(Stewart X Addison) #10539 - [
6772b1d81c
] - build: disableC4267
conversion compiler warning (Ben Noordhuis) #11205 - [
93416e9b7a
] - build: fix newlines in addon build output (Brian White) #11466 - [
2d5cb3b870
] - build: fail on CI if leftover processes (Rich Trott) #11269 - [
edcca78f10
] - build: add rule to clean addon tests build (Joyee Cheung) #11519 - [
0200a5a74e
] - build: fixnode_g
target (Daniel Bevenius) #10153 - [
f44c0a5d7a
] - build: Don't regenerate node symlink (sxa555) #9827 - [
947d07bd87
] - child_process: exitspawnSync
with null on signal (cjihrig) #11288 - [
4179c7050f
] - child_process: move anonymous class to top level (Jackson Tian) #11147 - [
818cef848e
] - child_process: remove empty if condition (cjihrig) #11427 - [
c371fdcf34
] - child_process: refactorinternal/child_process.js
(Arseniy Maximov) #11366 - [
b662c117cb
] - crypto: return the retval ofHMAC_Update
(Travis Meisenheimer) #10891 - [
44510197dd
] - crypto:freelist_max_len
is gone in OpenSSL 1.1.0 (Adam Langley) #10859 - [
34614af53b
] - crypto: add cert check issued by StartCom/WoSign (Shigeki Ohtsu) #9469 - [
b4b3bb4c5d
] - crypto: Remove expired certs from CNNIC whitelist (Shigeki Ohtsu) #9469 - [
1f44922e34
] - crypto: useCHECK_NE
instead ofABORT
or abort (Sam Roberts) #10413 - [
ccb6045f2d
] - crypto,tls: fix mutability of return values (Rich Trott) #10795 - [
e5d1e273d7
] - dgram: fix possibly deoptimizing use of arguments (Vse Mozhet Byt) #11242 - [
c7257e716f
] - dgram: remove this aliases (cjihrig) #11243 - [
c8d2ca7a78
] - fs: improve performance for syncstat()
functions (Brian White) #11522 - [
b4dc7a778f
] - http: makerequest.abort()
destroy the socket (Luigi Pinca) #10818 - [
d777da27bc
] - http: reject control characters inhttp.request()
(Ben Noordhuis) #8923 - [
bad0d9367e
] - http: add debug message for invalid header value (Evan Lucas) #9195 - [
bde1a7e09e
] - lib: remove unnecessary parameter forassertCrypto()
(Jackson Tian) #10834 - [
a2aa2f7de4
] - lib: refactorbootstrap_node.js
regular expression (Rich Trott) #10749 - [
797d9ee924
] - lib: refactor crypto cipher/hash/curve getters (Rich Trott) #10682 - [
69327f5e72
] - lib: renamekMaxCallbacksUntilQueueIsShortened
(JungMinu) #11473 - [
a6b2dfa43c
] - lib: add constantkMaxCallbacksUntilQueueIsShortened
(Daniel Bevenius) #11199 - [
a3ad63b9b3
] - lib,src: support values > 4GB in heap statistics (Ben Noordhuis) #10186 - [
8b5dd35ae8
] - meta: add explicit deprecation and semver-major policy (James M Snell) #7964 - [
4df850ba59
] - meta: remove Chris Dickinson from CTC (Chris Dickinson) #11267 - [
8863360a21
] - meta: adding Italo A. Casas PGP Fingerprint (Italo A. Casas) #11202 - [
8287d03adf
] - meta: decharter the http working group (James M Snell) #10604 - [
742ec6213f
] - net: prefer===
to==
(Arseniy Maximov) #11513 - [
5bfa43d8f0
] - os: improveloadavg()
performance (Brian White) #11516 - [
b7088a9355
] - process: improvememoryUsage()
performance (Brian White) #11497 - [
02e5f5c57e
] - process: fix typo in comments (levsthings) #11503 - [
db45bf850a
] - querystring: improve unescapeBuffer performance (Brian White) #10837 - [
32cdbca2dc
] - querystring: improvestringify()
performance (Brian White) #10852 - [
23f3f20963
] - querystring: improveparse()
performance (Brian White) #10874 - [
dc88b6572d
] - readline: refactor construct Interface (Jackson Tian) #4740 - [
f7c6ad2df9
] - readline: update 6 comparions to strict (Umair Ishaq) #11078 - [
b5a0d46c55
] - src: addNODE_NO_WARNINGS
to--help
output (cjihrig) #10918 - [
566e2fea48
] - src: remove unnecessaryreq_wrap_obj
(Daniel Bevenius) #10942 - [
c7436df889
] - src: add a missing space innode_os.cc
(Alexey Orlenko) #10931 - [
4358c6096c
] - src: enable writev for pipe handles on Unix (Alexey Orlenko) #10677 - [
28102edbc8
] - src: unconsume stream fix in internal http impl (Roee Kasher) #11015 - [
587857e301
] - src: fix delete operator on vm context (Franziska Hinkelmann) #11266 - [
b7cbb8002c
] - src: support UTF-8 in compiled-in JS source files (Ben Noordhuis) #11129 - [
ce01372b68
] - src: remove unused typedef (Ben Noordhuis) #11322 - [
1dddfeccb2
] - src: remove usage of deprecated debug API (Yang Guo) #11437 - [
7f273c6f6e
] - src: update http-parser link (Daniel Bevenius) #11477 - [
214b514efe
] - src: useABORT()
macro instead ofabort()
(Evan Lucas) #9613 - [
412f380903
] - stream: move legacy to lib/internal dir (yorkie) #8197 - [
3e9ce770f7
] - test-console: streamline arrow fn and refine regex (John Maguire) #11039 - [
b90a141cc7
] - timer: remove duplicated word in comment (asafdav2) #11323 - [
d71ebb90ec
] - timer,domain: maintain order of timer callbacks (John Barboza) #10522 - [
2a168917cb
] - tls: do not crash onSTARTTLS
whenOCSP
requested (Fedor Indutny) #10706 - [
1ed47d3f33
] - tty: avoid oob warning inTTYWrap::GetWindowSize()
(Dmitry Tsvettsikh) #11454 - [
9e6fcbb34c
] - url: fix surrogate handling inencodeAuth()
(Timothy Gu) #11387 - [
53213004eb
] - util: improve readability of normalizeEncoding (Joyee Cheung) #10439 - [
e54b433c8d
] - util: use ES2015+Object.is
to check negative zero (Shinnosuke Watanabe) #11332 - [
a55af77fc5
] - vm: refactor vm module (James M Snell) #11392
Notable Changes
- performance: The performance of several APIs has been improved.
Buffer.compare()
is up to 35% faster on average. (Brian White) #10927buffer.toJSON()
is up to 2859% faster on average. (Brian White) #10895fs.*statSync()
functions are now up to 9.3% faster on average. (Brian White) #11522os.loadavg()
is up to 151% faster. (Brian White) #11516process.memoryUsage()
is up to 34% faster. (Brian White) #11497querystring.unescape()
forBuffer
s is 15% faster on average. (Brian White) #10837querystring.stringify()
is up to 7.8% faster on average. (Brian White) #10852querystring.parse()
is up to 21% faster on average. (Brian White) #10874
- IPC: Batched writes have been enabled for process IPC on platforms that support Unix Domain Sockets. (Alexey Orlenko) #10677
- Performance gains may be up to 40% for some workloads.
- child_process:
spawnSync
now returns a nullstatus
when child is terminated by a signal. (cjihrig) #11288- This fixes the behavior to act like
spawn()
does.
- This fixes the behavior to act like
- http:
- node: Heap statistics now support values larger than 4GB. (Ben Noordhuis) #10186
- timers: Timer callbacks now always maintain order when interacting with domain error handling. (John Barboza) #10522
Git Diffstats
(Showing the delta between v6.10.0 and v6.10.1, ignoring deps/npm
.)
Without deps, tools, docs, benchmarks, or tests:
.eslintignore | 1 +
.eslintrc | 147 -
.eslintrc.yaml | 152 +
Makefile | 52 +-
common.gypi | 4 +
configure | 20 +-
lib/.eslintrc | 5 -
lib/.eslintrc.yaml | 5 +
lib/_http_client.js | 13 +-
lib/_http_outgoing.js | 3 +
lib/_http_server.js | 4 +-
lib/_tls_common.js | 4 +-
lib/_tls_legacy.js | 2 +-
lib/_tls_wrap.js | 9 +-
lib/assert.js | 85 +-
lib/buffer.js | 63 +-
lib/child_process.js | 4 +-
lib/crypto.js | 20 +-
lib/dgram.js | 79 +-
lib/fs.js | 28 +-
lib/https.js | 2 +-
lib/internal/bootstrap_node.js | 5 +-
lib/internal/child_process.js | 83 +-
lib/internal/module.js | 10 +-
lib/internal/process.js | 20 +-
lib/internal/process/next_tick.js | 10 +-
lib/internal/streams/legacy.js | 93 +
lib/internal/util.js | 46 +-
lib/net.js | 5 +-
lib/os.js | 8 +-
lib/querystring.js | 207 +-
lib/readline.js | 44 +-
lib/repl.js | 38 +-
lib/stream.js | 99 +-
lib/timers.js | 17 +-
lib/tls.js | 8 +-
lib/tty.js | 4 +-
lib/url.js | 52 +-
lib/util.js | 20 +-
lib/v8.js | 4 +-
lib/vm.js | 63 +-
node.gyp | 21 +-
src/CNNICHashWhitelist.inc | 5216 ++++-------------------------------
src/StartComAndWoSignData.inc | 89 +
src/connection_wrap.cc | 3 +-
src/env-inl.h | 8 +-
src/env.h | 16 +-
src/node.cc | 42 +-
src/node_contextify.cc | 11 +-
src/node_crypto.cc | 59 +-
src/node_file.cc | 72 +-
src/node_http_parser.cc | 2 +-
src/node_javascript.cc | 51 -
src/node_os.cc | 16 +-
src/node_v8.cc | 12 +-
src/node_version.h | 2 +-
src/pipe_wrap.cc | 4 +
src/spawn_sync.cc | 13 +-
58 files changed, 1728 insertions(+), 5447 deletions(-)
Tools only:
tools/js2c.py | 117 ++++++++++++++++++++++++++++++++-----------------
tools/license2rtf.js | 4 +-
tools/test.py | 2 +-
3 files changed, 80 insertions(+), 43 deletions(-)
Deps only:
deps/v8/include/v8-version.h | 2 +-
deps/v8/include/v8.h | 4 +-
deps/v8/src/api-arguments.h | 9 +-
deps/v8/src/api-natives.cc | 57 +++-
deps/v8/src/api-natives.h | 3 +-
deps/v8/src/arm/builtins-arm.cc | 13 +-
deps/v8/src/arm/code-stubs-arm.cc | 6 +-
deps/v8/src/arm64/builtins-arm64.cc | 13 +-
deps/v8/src/arm64/code-stubs-arm64.cc | 10 +-
deps/v8/src/builtins.cc | 90 +++--
deps/v8/src/builtins.h | 3 +-
deps/v8/src/compiler.cc | 5 +-
deps/v8/src/ia32/builtins-ia32.cc | 13 +-
deps/v8/src/ia32/code-stubs-ia32.cc | 7 +-
deps/v8/src/messages.h | 2 +
deps/v8/src/mips/builtins-mips.cc | 13 +-
deps/v8/src/mips/code-stubs-mips.cc | 6 +-
deps/v8/src/mips64/builtins-mips64.cc | 13 +-
deps/v8/src/mips64/code-stubs-mips64.cc | 6 +-
deps/v8/src/objects.cc | 74 ++--
deps/v8/src/parsing/expression-classifier.h | 353 +++++++++++++-------
deps/v8/src/parsing/parser-base.h | 47 ++-
deps/v8/src/parsing/parser.cc | 19 +-
deps/v8/src/parsing/parser.h | 4 +-
deps/v8/src/parsing/preparser.h | 18 +-
deps/v8/src/ppc/builtins-ppc.cc | 13 +-
deps/v8/src/ppc/code-stubs-ppc.cc | 6 +-
deps/v8/src/s390/builtins-s390.cc | 13 +-
deps/v8/src/s390/code-stubs-s390.cc | 6 +-
deps/v8/src/x64/builtins-x64.cc | 13 +-
deps/v8/src/x64/code-stubs-x64.cc | 6 +-
deps/v8/src/x87/builtins-x87.cc | 13 +-
deps/v8/src/x87/code-stubs-x87.cc | 7 +-
deps/v8/test/cctest/test-api.cc | 95 +++++-
deps/v8/test/mjsunit/regress/regress-666046.js | 57 ++++
.../pylib/gyp/generator/compile_commands_json.py | 115 +++++++
36 files changed, 764 insertions(+), 370 deletions(-)
Docs only:
AUTHORS | 2 +-
BUILDING.md | 3 +-
CHANGELOG.md | 3 +-
COLLABORATOR_GUIDE.md | 225 ++++++++++++++++++++++++--
CONTRIBUTING.md | 42 ++---
README.md | 71 +++++----
WORKING_GROUPS.md | 16 --
doc/STYLE_GUIDE.md | 63 ++++++++
doc/api/addons.md | 4 +-
doc/api/assert.md | 51 ++++--
doc/api/buffer.md | 105 ++++++++++---
doc/api/child_process.md | 21 +--
doc/api/console.md | 27 ++--
doc/api/crypto.md | 103 ++++++------
doc/api/debugger.md | 2 +-
doc/api/dgram.md | 62 ++++----
doc/api/dns.md | 36 +++--
doc/api/documentation.md | 2 +-
doc/api/domain.md | 22 +--
doc/api/errors.md | 62 ++++++--
doc/api/fs.md | 3 +-
doc/api/globals.md | 10 +-
doc/api/http.md | 124 ++++++++-------
doc/api/modules.md | 2 +-
doc/api/net.md | 9 +-
doc/api/process.md | 110 ++++++-------
doc/api/punycode.md | 2 +-
doc/api/readline.md | 4 +-
doc/api/repl.md | 11 +-
doc/api/stream.md | 57 ++++++-
doc/api/string_decoder.md | 2 +-
doc/api/tls.md | 65 ++++----
doc/api/util.md | 2 +-
doc/api/vm.md | 30 +++-
doc/api/zlib.md | 17 +-
doc/api_assets/dnt_helper.js | 49 ++++++
doc/changelogs/CHANGELOG_V6.md | 329 +++++++++++++++++++++++++++++++++++++++
doc/guides/maintaining-V8.md | 4 +-
doc/guides/writing-tests.md | 156 ++++++++++++++-----
doc/onboarding-extras.md | 6 +-
doc/onboarding.md | 5 +
doc/template.html | 1 +
42 files changed, 1443 insertions(+), 477 deletions(-)
Tests & Benchmarks only:
2.3% benchmark/assert/
0.9% benchmark/buffers/
0.4% benchmark/dgram/
0.3% benchmark/fs/
2.7% benchmark/misc/
1.0% benchmark/net/
0.1% benchmark/os/
0.1% benchmark/process/
0.9% benchmark/querystring/
2.3% benchmark/timers/
0.8% benchmark/util/
0.1% benchmark/
0.4% test/addons/new-target/
1.7% test/debugger/
0.6% test/doctool/
1.2% test/fixtures/keys/fake-startcom-root-issued-certs/
8.1% test/fixtures/keys/
0.1% test/fixtures/
0.0% test/gc/
0.1% test/inspector/
2.9% test/internet/
0.9% test/known_issues/
0.8% test/message/
63.8% test/parallel/
0.1% test/pseudo-tty/
2.1% test/pummel/
3.1% test/sequential/
0.8% test/
261 files changed, 4480 insertions(+), 1983 deletions(-)
Most active commit
Of the 297 commits, 34614af
was the most active:
(Excluding docs, npm, eslint, and tests.)
commit 34614af53b864ac10922cff526ba2295b510fa83
Author: Shigeki Ohtsu <ohtsu@ohtsu.org>
Date: Fri Nov 4 18:19:20 2016 +0900
crypto: add cert check issued by StartCom/WoSign
When tls client connects to the server with certification issued by
either StartCom or WoSign listed in StartComAndWoSignData.inc, check
notBefore of the server certificate and CERT_REVOKED error returns if
it is after 00:00:00 on October 21, 2016.
See for details in
https://blog.mozilla.org/security/2016/10/24/distrusting-new-wosign-and-startcom-certificates/,
https://security.googleblog.com/2016/10/distrusting-wosign-and-startcom.html
and
https://support.apple.com/en-us/HT204132
Fixes: https://github.com/nodejs/node/issues/9434
PR-URL: https://github.com/nodejs/node/pull/9469
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
src/StartComAndWoSignData.inc | 89 ++++++++++++++++++++
src/node_crypto.cc | 44 +++++++++-
test/fixtures/keys/Makefile | 68 +++++++++++++++
test/fixtures/keys/agent8-cert.pem | 20 +++++
test/fixtures/keys/agent8-csr.pem | 17 ++++
test/fixtures/keys/agent8-key.pem | 27 ++++++
test/fixtures/keys/agent8.cnf | 17 ++++
test/fixtures/keys/agent9-cert.pem | 20 +++++
test/fixtures/keys/agent9-csr.pem | 17 ++++
test/fixtures/keys/agent9-key.pem | 27 ++++++
test/fixtures/keys/agent9.cnf | 17 ++++
test/fixtures/keys/fake-startcom-root-cert.pem | 22 +++++
test/fixtures/keys/fake-startcom-root-csr.pem | 18 ++++
.../fixtures/keys/fake-startcom-root-database.txt | 2 +
.../keys/fake-startcom-root-database.txt.attr | 1 +
.../keys/fake-startcom-root-database.txt.attr.old | 1 +
.../keys/fake-startcom-root-database.txt.old | 1 +
.../keys/fake-startcom-root-issued-certs/01.pem | 20 +++++
.../keys/fake-startcom-root-issued-certs/02.pem | 20 +++++
test/fixtures/keys/fake-startcom-root-key.pem | 27 ++++++
test/fixtures/keys/fake-startcom-root-serial | 1 +
test/fixtures/keys/fake-startcom-root-serial.old | 1 +
test/fixtures/keys/fake-startcom-root.cnf | 46 +++++++++++
.../test-tls-startcom-wosign-whitelist.js | 91 +++++++++++++++++++++
24 files changed, 611 insertions(+), 3 deletions(-)
This is a regular and routine release for a Node.js LTS release line. We will be sure to let you know when a release contains a critical update and a recommendation to upgrade. Of course, we'd love you to upgrade, but this release is not critical unless you are experiencing one of the issues identified and fixed above.