The Nodesource Blog

#shoptalk Subscribe

Node.js v5.2.0 Release Brief

This week’s Node.js Stable release comes along with a nice bunch of new functionality, as well as a host of documentation updates, and a myriad of test improvements to better ensure our stability.

As with all releases within major version lines, minor and patch upgrades should be drop-in replacements for previous versions. Rebuilding add-ons should not be necessary.

Overview

Of a total of 105 commits:

  • 27 were documentation-only commits.
  • 32 only modify tests and 1 only affects internal tooling.
  • One V8 commit was backported from V8 upstream: 819b40a as ab25589

7 commits were tagged as semver-minor, adding new functionality and justifying the jump to v5.2.0:

  • [ed255abdc1] - (SEMVER-MINOR) build,src: add Intel Vtune profiling support (Chunyang Dai) #3785
  • [da5ac55c83] - (SEMVER-MINOR) crypto: simplify using pre-existing keys with ECDH (Michael Ruddy) #3511
  • [0869ef3c55] - (SEMVER-MINOR) repl: allow leading period in multiline input (Zirak) #3835
  • [7e18f2ec62] - (SEMVER-MINOR) src: add BE support to StringBytes::Encode() (Bryon Leung) #3410
  • [80f7f65464] - (SEMVER-MINOR) tls: support reading multiple cas from one input (Ben Noordhuis) #4099
  • [6d4a03d3d2] - (SEMVER-MINOR) tools: list missing whitespace/if-one-line cpplint (Ben Noordhuis) #4099
  • [1c1c1a0f2b] - (SEMVER-MINOR) tools: add --prof-process flag to node binary (Matt Loring) #4021

The remaining significant commits are as follows:

  • [08a3f29fd4] - buffer: fix range checking for slowToString (Matt Loring) #4019
  • [e3a8e8bba4] - buffer: Prevent Buffer constructor deopt (Bryce Baril) #4158
  • [0e18e68324] - buffer: fix writeInt{B,L}E for some neg values (Peter A. Bigot) #3994
  • [ab5b529dd2] - buffer: default to UTF8 in byteLength() (Tom Gallacher) #4010
  • [fcf0e8ebdf] - buffer: move checkFloat from lib into src (Matt Loring) #3763
  • [12649f4496] - build: add "--partly-static" build options (Super Zheng) #4152
  • [a76d788119] - build: update signtool description, add url (Rod Vagg) #4011
  • [7793c364fc] - child_process: flush consuming streams (Dave) #4071
  • [f29c5d6e70] - configure: v8_use_snapshot should be true (Fedor Indutny) #3962
  • [cfc97641ee] - crypto: fix native module compilation with FIPS (Stefan Budeanu) #4023
  • [b81b45dabd] - crypto: update root certificates (Ben Noordhuis) #3951
  • [def681a07e] - crypto: disable crypto.createCipher in FIPS mode (Stefan Budeanu) #3754
  • [ce423f3624] - debugger: introduce exec method for debugger (Jackson Tian)
  • [4c8800c2de] - fs,doc: use target instead of destination (yorkie) #3912
  • [1f0e8dca8e] - installer: install the tick processor (Matt Loring) #3032
  • [e8e4e0718b] - meta: remove use of profanity in source (Myles Borins) #4122
  • [13834caa28] - module: fix column offsets in errors (Tristian Flanagan) #2867
  • [8988e1e117] - module,repl: remove repl require() hack (Ben Noordhuis) #4026
  • [baac81d95f] - net: add local address/port for better errors (Jan Schär) #3946
  • [12754c5dc3] - net: small code cleanup (Jan Schär) #3943
  • [8a5e4345fd] - node: s/doNTCallbackX/nextTickCallbackWithXArgs/ (Rod Vagg) #4167
  • [aaab108dfe] - repl: attach location info to syntax errors (cjihrig) #4013
  • [b08126dc9d] - src: refactor vcbuild configure args creation (Rod Vagg) #3399
  • [da3137d0c5] - src: don't print garbage errors (cjihrig) #4112
  • [9e9346fa32] - src: use GetCurrentProcessId() for process.pid (Ben Noordhuis) #4163
  • [d969c0965c] - src: define Is* util functions with macros (cjihrig) #4118
  • [458facdf66] - src: define getpid() based on OS (cjihrig) #4146
  • [756ab9caad] - stream: be less eager with readable flag (Brian White) #4141
  • [8f845ba28a] - stream_wrap: error if stream has StringDecoder (Fedor Indutny) #4031
  • [1c1af81ea0] - streams: update .readable/.writable to false (Brian White) #4083
  • [1279adc756] - timers: optimize callback call: bind -> arrow (Andrei Sedoi) #4038
  • [939f305d56] - tls_wrap: slice buffer properly in ClearOut (Fedor Indutny) #4184
  • [1b434e0654] - util: determine object types in C++ (cjihrig) #4100
  • [c93e2678f0] - util: fix constructor/instanceof checks (Brian White) #3385
  • [098a3113e1] - util: move .decorateErrorStack to internal/util (Ben Noordhuis) #4026
  • [e68ea16c32] - util: add decorateErrorStack() (cjihrig) #4013
  • [c584c3e08f] - util,src: allow lookup of hidden values (cjihrig) #3988

Notable Changes

  • build:
    • Add support for Intel's VTune JIT profiling when compiled with --enable-vtune-profiling. For more information about VTune, see https://software.intel.com/en-us/node/544211. (Chunyang Dai) #3785.
    • Properly enable V8 snapshots by default. Due to a configuration error, snapshots have been kept off by default when the intention is for the feature to be enabled. (Fedor Indutny) #3962.
  • crypto:
    • Simplify use of ECDH (Elliptic Curve Diffie-Hellman) objects (created via crypto.createECDH(curve_name)) with private keys that are not dynamically generated via generateKeys(). The public key is now computed when explicitly setting a private key. Added validity checks to reduce the possibility of computing weak or invalid shared secrets. Also, deprecated the setPublicKey() method for ECDH objects as its usage is unnecessary and can lead to inconsistent state. (Michael Ruddy) #3511.
    • Update root certificates from the current list stored maintained by Mozilla NSS. (Ben Noordhuis) #3951.
    • Multiple CA certificates can now be passed with the ca option to TLS methods as an array of strings or in a single new-line separated string. (Ben Noordhuis) #4099
  • tools: Include a tick processor in core, exposed via the --prof-process command-line argument which can be used to process V8 profiling output files generated when using the --prof command-line argument. (Matt Loring) #4021.

Git Diffstats

(Showing the delta between v5.1.1 and v5.2.0, ignoring deps/npm.)

Without deps, docs, benchmarks, or tests:

 .eslintignore                     |    1 +
 .gitignore                        |    1 +
 Makefile                          |    2 +-
 configure                         |   55 +-
 lib/_debugger.js                  |   28 +-
 lib/_stream_readable.js           |    2 +-
 lib/_stream_wrap.js               |   16 +-
 lib/_stream_writable.js           |    1 +
 lib/buffer.js                     |   78 +-
 lib/dns.js                        |    2 +-
 lib/fs.js                         |   12 +-
 lib/internal/child_process.js     |    2 +-
 lib/internal/module.js            |   26 +-
 lib/internal/util.js              |   21 +
 lib/internal/v8_prof_polyfill.js  |  100 ++
 lib/internal/v8_prof_processor.js |   44 +
 lib/module.js                     |   47 +-
 lib/net.js                        |   11 +-
 lib/repl.js                       |   10 +-
 lib/timers.js                     |   18 +-
 lib/util.js                       |   33 +-
 node.gyp                          |   21 +
 src/env.cc                        |    7 +
 src/node.cc                       |   30 +-
 src/node.js                       |   37 +-
 src/node_buffer.cc                |   52 +-
 src/node_contextify.cc            |   37 +-
 src/node_crypto.cc                |  122 +-
 src/node_crypto.h                 |    5 +-
 src/node_file.cc                  |   10 +-
 src/node_internals.h              |    2 +-
 src/node_root_certs.h             |  367 ++--
 src/node_util.cc                  |   56 +-
 src/node_version.h                |    4 +-
 src/string_bytes.cc               |   16 +-
 src/tls_wrap.cc                   |    4 +-
 src/util-inl.h                    |   14 +
 src/util.h                        |    2 +
 tools/certdata.txt                | 3133 +++++++++++------------------------
 tools/cpplint.py                  |    1 +
 tools/gyp_node.py                 |    5 +
 tools/install.py                  |    1 +
 tools/js2c.py                     |    2 +-
 tools/test.py                     |   23 +-
 tools/v8-prof/polyfill.js         |   93 --
 tools/v8-prof/tick-processor.js   |   51 -
 vcbuild.bat                       |   37 +-
 47 files changed, 1829 insertions(+), 2813 deletions(-)

Deps only:

 deps/v8/src/ast-numbering.cc                          |  2 +-
 deps/v8/src/compiler/ast-graph-builder.cc             |  3 +--
 deps/v8/src/compiler/linkage.cc                       |  3 ++-
 deps/v8/src/full-codegen/arm/full-codegen-arm.cc      |  2 +-
 deps/v8/src/full-codegen/arm64/full-codegen-arm64.cc  |  2 +-
 deps/v8/src/full-codegen/ia32/full-codegen-ia32.cc    |  2 +-
 deps/v8/src/full-codegen/mips/full-codegen-mips.cc    |  2 +-
 .../v8/src/full-codegen/mips64/full-codegen-mips64.cc |  2 +-
 deps/v8/src/full-codegen/ppc/full-codegen-ppc.cc      |  2 +-
 deps/v8/src/full-codegen/x64/full-codegen-x64.cc      |  2 +-
 deps/v8/src/full-codegen/x87/full-codegen-x87.cc      |  2 +-
 deps/v8/src/isolate.cc                                |  9 +++++++--
 deps/v8/src/scopes.cc                                 |  4 ++--
 deps/v8/src/scopes.h                                  |  4 ++--
 deps/v8/test/message/regress/regress-4266.js          | 11 +++++++++++
 deps/v8/test/message/regress/regress-4266.out         | 10 ++++++++++
 deps/v8/test/mjsunit/regress/regress-4266.js          | 17 +++++++++++++++++
 17 files changed, 61 insertions(+), 18 deletions(-)

Docs only:

 CHANGELOG.md                    | 137 ++++++++++++++++++++++++-
 README.md                       |  16 ++-
 WORKING_GROUPS.md               |  19 +++-
 doc/api/addons.markdown         |   2 +-
 doc/api/assert.markdown         |  21 ++--
 doc/api/buffer.markdown         |  25 +++--
 doc/api/child_process.markdown  |  75 +++++++-------
 doc/api/cluster.markdown        |  43 ++++----
 doc/api/console.markdown        |  27 ++---
 doc/api/crypto.markdown         | 121 +++++++++++++++--------
 doc/api/debugger.markdown       |   1 +
 doc/api/dgram.markdown          |  56 ++++++-----
 doc/api/dns.markdown            |  34 +++----
 doc/api/documentation.markdown  |   2 +-
 doc/api/domain.markdown         |  52 +++++-----
 doc/api/errors.markdown         |  89 +++++++++--------
 doc/api/fs.markdown             | 135 +++++++++++++++----------
 doc/api/globals.markdown        |  16 +--
 doc/api/http.markdown           | 203 +++++++++++++++++++-------------------
 doc/api/https.markdown          |  70 ++++++-------
 doc/api/modules.markdown        |  10 +-
 doc/api/net.markdown            | 138 ++++++++++++++------------
 doc/api/process.markdown        |  84 ++++++++--------
 doc/api/punycode.markdown       |   2 +-
 doc/api/readline.markdown       |  34 ++++---
 doc/api/repl.markdown           |  16 +--
 doc/api/stream.markdown         | 142 +++++++++++++-------------
 doc/api/string_decoder.markdown |   2 +-
 doc/api/synopsis.markdown       |   2 +-
 doc/api/timers.markdown         |   7 +-
 doc/api/tls.markdown            |  52 +++++-----
 doc/api/tty.markdown            |   4 +-
 doc/api/url.markdown            |   4 +-
 doc/api/util.markdown           |   6 +-
 doc/api/vm.markdown             |  29 ++++--
 doc/api/zlib.markdown           |   6 +-
 doc/api_assets/style.css        |   6 +-
 doc/node.1                      |   2 +
 38 files changed, 1002 insertions(+), 688 deletions(-)

Tests & Benchmarks only:

   0.0% benchmark/
   0.3% test/debugger/
   0.0% test/fixtures/
  13.3% test/internet/
   1.0% test/message/
  78.6% test/parallel/
   1.4% test/pummel/
   4.0% test/sequential/
   0.8% test/
 75 files changed, 1271 insertions(+), 650 deletions(-)

Most active commit

Of the 105 commits, d7a7d3e was the most active (not counting npm or doc updates):

commit d7a7d3e6f75c26aeb287cfeb0d3c1193e583b616
Author: Ben Noordhuis <info@bnoordhuis.nl>
Date:   Sat Nov 21 12:43:57 2015 +0100

    tools: update certdata.txt

    This is the latest certdata.txt from [0], last updated on 2015-11-13.

    [0] https://hg.mozilla.org/mozilla-central/raw-file/64df3815df9c/security/nss/lib/ckfw/builtins/certdata.txt

    PR-URL: https://github.com/nodejs/node/pull/3951
    Reviewed-By: Fedor Indutny <fedor@indutny.com>

 tools/certdata.txt | 3133 +++++++++++++++-----------------------------------
 1 file changed, 947 insertions(+), 2186 deletions(-)

These quick patch releases will become routine though v5’s stable lifecycle, and this will also continue into future stable release lines. There is a lot more effort being put into core than in the recent past and frequent releases mean that the work being done gets into your hands quicker. 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.