The NodeSource Blog

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:

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: move setImmediate benchmarks to timers (Joshua Colvin) #11010
  • [a469ce5826] - benchmark: add assert.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: improve compare() performance (Brian White) #10927
  • [2b52859535] - buffer: fix comments in bidirectionalIndexOf (dcposch@dcpos.ch) #10162
  • [f7879d98f8] - buffer: improve toJSON() 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: disable C4267 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: fix node_g target (Daniel Bevenius) #10153
  • [f44c0a5d7a] - build: Don't regenerate node symlink (sxa555) #9827
  • [947d07bd87] - child_process: exit spawnSync 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: refactor internal/child_process.js (Arseniy Maximov) #11366
  • [b662c117cb] - crypto: return the retval of HMAC_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: use CHECK_NE instead of ABORT 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 sync stat() functions (Brian White) #11522
  • [b4dc7a778f] - http: make request.abort() destroy the socket (Luigi Pinca) #10818
  • [d777da27bc] - http: reject control characters in http.request() (Ben Noordhuis) #8923
  • [bad0d9367e] - http: add debug message for invalid header value (Evan Lucas) #9195
  • [bde1a7e09e] - lib: remove unnecessary parameter for assertCrypto() (Jackson Tian) #10834
  • [a2aa2f7de4] - lib: refactor bootstrap_node.js regular expression (Rich Trott) #10749
  • [797d9ee924] - lib: refactor crypto cipher/hash/curve getters (Rich Trott) #10682
  • [69327f5e72] - lib: rename kMaxCallbacksUntilQueueIsShortened (JungMinu) #11473
  • [a6b2dfa43c] - lib: add constant kMaxCallbacksUntilQueueIsShortened (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: improve loadavg() performance (Brian White) #11516
  • [b7088a9355] - process: improve memoryUsage() performance (Brian White) #11497
  • [02e5f5c57e] - process: fix typo in comments (levsthings) #11503
  • [db45bf850a] - querystring: improve unescapeBuffer performance (Brian White) #10837
  • [32cdbca2dc] - querystring: improve stringify() performance (Brian White) #10852
  • [23f3f20963] - querystring: improve parse() performance (Brian White) #10874
  • [dc88b6572d] - readline: refactor construct Interface (Jackson Tian) #4740
  • [f7c6ad2df9] - readline: update 6 comparions to strict (Umair Ishaq) #11078
  • [b5a0d46c55] - src: add NODE_NO_WARNINGS to --help output (cjihrig) #10918
  • [566e2fea48] - src: remove unnecessary req_wrap_obj (Daniel Bevenius) #10942
  • [c7436df889] - src: add a missing space in node_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: use ABORT() macro instead of abort() (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 on STARTTLS when OCSP requested (Fedor Indutny) #10706
  • [1ed47d3f33] - tty: avoid oob warning in TTYWrap::GetWindowSize() (Dmitry Tsvettsikh) #11454
  • [9e6fcbb34c] - url: fix surrogate handling in encodeAuth() (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) #10927
    • buffer.toJSON() is up to 2859% faster on average. (Brian White) #10895
    • fs.*statSync() functions are now up to 9.3% faster on average. (Brian White) #11522
    • os.loadavg() is up to 151% faster. (Brian White) #11516
    • process.memoryUsage() is up to 34% faster. (Brian White) #11497
    • querystring.unescape() for Buffers is 15% faster on average. (Brian White) #10837
    • querystring.stringify() is up to 7.8% faster on average. (Brian White) #10852
    • querystring.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 null status when child is terminated by a signal. (cjihrig) #11288
    • This fixes the behavior to act like spawn() does.
  • http:
    • Control characters are now always rejected when using http.request(). (Ben Noordhuis) #8923
    • Debug messages have been added for cases when headers contain invalid values. (Evan Lucas) #9195
  • 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.

The NodeSource platform offers a high-definition view of the performance, security and behavior of Node.js applications and functions.

Start for Free