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.