Hello community,
here is the log from the commit of package nodejs8 for openSUSE:Factory checked in at 2018-01-06 18:52:14
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/nodejs8 (Old)
and /work/SRC/openSUSE:Factory/.nodejs8.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "nodejs8"
Sat Jan 6 18:52:14 2018 rev:11 rq:561900 version:8.9.3
Changes:
--------
--- /work/SRC/openSUSE:Factory/nodejs8/nodejs8.changes 2017-12-18 08:59:27.162958825 +0100
+++ /work/SRC/openSUSE:Factory/.nodejs8.new/nodejs8.changes 2018-01-06 18:52:21.766334674 +0100
@@ -1,0 +2,13 @@
+Fri Dec 22 14:01:07 UTC 2017 - adam.majer@suse.de
+
+- Enable CI tests in %check target
+ + fix_ci_tests.patch:
+ - DNS queries in buildroots are failing with EAI_AGAIN
+ - disable test-module-loading-globalpaths.js - we have
+ hardcoded global paths
+ + versioned.patch: call versioned node binary for tests
+ + openssl11.patch: fix OpenSSL 1.1 backport so all SSL tests pass
+ instead of crashing in some situations.
+- node-gyp-addon-gypi.patch: fix typo allowing unit tests to compile
+
+-------------------------------------------------------------------
@@ -14 +27 @@
- * deps/openssl: updated to 1.0.2n
+ * deps/openssl: updated to 1.0.2n (bsc#1072322)
New:
----
fix_ci_tests.patch
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ nodejs8.spec ++++++
--- /var/tmp/diff_new_pack.rN8rXW/_old 2018-01-06 18:52:23.458255620 +0100
+++ /var/tmp/diff_new_pack.rN8rXW/_new 2018-01-06 18:52:23.462255433 +0100
@@ -93,6 +93,7 @@
## UPSTREAM PATCHES HERE, if any
Patch2: openssl11.patch
+Patch3: fix_ci_tests.patch
## Our patches
# PATCH-FIX-OPENSUSE -- set correct path for dtrace if it is built
@@ -256,6 +257,9 @@
echo "`grep node-v%{version}.tar.xz %{S:1} | head -n1 | cut -c1-64` %{S:0}" | sha256sum -c
%setup -q -n node-v%{version}
%patch2 -p1
+%patch3 -p1
+%if ! %{with intree_openssl}
+%endif
%patch101 -p1
%patch102 -p1
# Add check_output to configure script (not part of Python 2.6 in SLE11).
@@ -386,9 +390,19 @@
ln -s %{_sysconfdir}/alternatives/npx.1%{ext_man} %{buildroot}%{_mandir}/man1/npx.1%{ext_man}
%endif
-# Check that Node.js isn't completely broken.
%check
-%{buildroot}%{_bindir}/node%{node_version_number} -e 'require("assert").strictEqual(process.versions.node, "%{version}");'
+ln addon-rpm.gypi deps/npm/node_modules/node-gyp/addon-rpm.gypi
+# Tarball doesn't have eslint package distributed, so disable some tests
+find test -name \*-eslint-\* -print -delete
+# No documentation is generated, don't bother checking it
+rm -f test/doctool/test-make-doc.js
+# DNS lookup doesn't work in build root
+rm -f test/parallel/test-dns-cancel-reverse-lookup.js \
+ test/parallel/test-dns-resolveany.js
+# multicast test fail since no socket?
+rm -f test/parallel/test-dgram-membership.js
+# Run CI tests - 'advisory for now'
+make test-ci || echo "****** UNIT TESTS NOT ALL HAPPY *****"
%files
%defattr(-, root, root)
++++++ fix_ci_tests.patch ++++++
Author: Adam Majer
Date: Dec 20 09:18:49 UTC 2017
Summary: Fix CI unit tests framework for OBS building
Index: node-v8.9.3/test/parallel/test-module-loading-globalpaths.js
===================================================================
--- node-v8.9.3.orig/test/parallel/test-module-loading-globalpaths.js
+++ node-v8.9.3/test/parallel/test-module-loading-globalpaths.js
@@ -7,6 +7,9 @@ const fs = require('fs');
const child_process = require('child_process');
const pkgName = 'foo';
+common.skip('hardcoded global paths');
+return;
+
if (process.argv[2] === 'child') {
console.log(require(pkgName).string);
} else {
Index: node-v8.9.3/Makefile
===================================================================
--- node-v8.9.3.orig/Makefile
+++ node-v8.9.3/Makefile
@@ -409,7 +409,7 @@ test-ci-js: | clear-stalled
fi
test-ci: LOGLEVEL := info
-test-ci: | clear-stalled build-addons build-addons-napi doc-only
+test-ci: | clear-stalled build-addons build-addons-napi
out/Release/cctest --gtest_output=tap:cctest.tap
$(PYTHON) tools/test.py $(PARALLEL_ARGS) -p tap --logfile test.tap \
--mode=release --flaky-tests=$(FLAKY_TESTS) \
Index: node-v8.9.3/test/doctool/test-make-doc.js
===================================================================
--- node-v8.9.3.orig/test/doctool/test-make-doc.js
+++ node-v8.9.3/test/doctool/test-make-doc.js
@@ -11,7 +11,7 @@ const assert = require('assert');
const fs = require('fs');
const path = require('path');
-const apiPath = path.resolve(common.projectDir, 'out', 'doc', 'api');
+const apiPath = path.resolve(common.projectDir, 'doc', 'api');
const docs = fs.readdirSync(apiPath);
assert.ok(docs.includes('_toc.html'));
++++++ node-gyp-addon-gypi.patch ++++++
--- /var/tmp/diff_new_pack.rN8rXW/_old 2018-01-06 18:52:23.518252816 +0100
+++ /var/tmp/diff_new_pack.rN8rXW/_new 2018-01-06 18:52:23.518252816 +0100
@@ -71,7 +71,7 @@
// this logic ported from the old `gyp_addon` python file
var gyp_script = path.resolve(__dirname, '..', 'gyp', 'gyp_main.py')
- var addon_gypi = path.resolve(__dirname, '..', 'addon.gypi')
-+ var addon_gypi_file = gyp.opts.target || gyp.opts.nodeDir ? 'addon.gypi' : 'addon-rpm.gypi'
++ var addon_gypi_file = gyp.opts.target || gyp.opts.nodedir ? 'addon.gypi' : 'addon-rpm.gypi'
+ var addon_gypi = path.resolve(__dirname, '..', addon_gypi_file)
var common_gypi = path.resolve(nodeDir, 'include/node/common.gypi')
fs.stat(common_gypi, function (err, stat) {
++++++ openssl11.patch ++++++
--- /var/tmp/diff_new_pack.rN8rXW/_old 2018-01-06 18:52:23.546251508 +0100
+++ /var/tmp/diff_new_pack.rN8rXW/_new 2018-01-06 18:52:23.550251321 +0100
@@ -3,6 +3,7 @@
Summary: optional OpenSSL 1.1 support
This is a backport of changes
+https://github.com/nodejs/node/pull/15757
https://github.com/nodejs/node/pull/16130
@@ -448,7 +449,7 @@
+ int enc) {
+ SecureContext* sc = static_cast(
+ SSL_CTX_get_app_data(SSL_get_SSL_CTX(ssl)));
-
++
+ if (enc) {
+ memcpy(name, sc->ticket_key_name_, sizeof(sc->ticket_key_name_));
+ if (RAND_bytes(iv, 16) <= 0 ||
@@ -465,7 +466,7 @@
+ // The ticket key name does not match. Discard the ticket.
+ return 0;
+ }
-+
+
+ if (EVP_DecryptInit_ex(ectx, EVP_aes_128_cbc(), nullptr, sc->ticket_key_aes_,
+ iv) <= 0 ||
+ HMAC_Init_ex(hctx, sc->ticket_key_hmac_, sizeof(sc->ticket_key_hmac_),
@@ -982,7 +983,7 @@
void SignBase::CheckThrow(SignBase::Error error) {
HandleScope scope(env()->isolate());
-@@ -4056,21 +4274,6 @@ void Sign::New(const FunctionCallbackInf
+@@ -4056,66 +4274,23 @@ void Sign::New(const FunctionCallbackInf
}
@@ -1004,8 +1005,13 @@
void Sign::SignInit(const FunctionCallbackInfo<Value>& args) {
Sign* sign;
ASSIGN_OR_RETURN_UNWRAP(&sign, args.Holder());
-@@ -4083,16 +4286,7 @@ void Sign::SignInit(const FunctionCallba
- THROW_AND_RETURN_IF_NOT_STRING(args[0], "Sign type");
+- Environment* env = sign->env();
+-
+- if (args.Length() == 0) {
+- return env->ThrowError("Sign type argument is mandatory");
+- }
+-
+- THROW_AND_RETURN_IF_NOT_STRING(args[0], "Sign type");
const node::Utf8Value sign_type(args.GetIsolate(), args[0]);
- sign->CheckThrow(sign->SignInit(*sign_type));
@@ -1022,9 +1028,15 @@
}
-@@ -4106,16 +4300,9 @@ void Sign::SignUpdate(const FunctionCall
+ void Sign::SignUpdate(const FunctionCallbackInfo<Value>& args) {
+- Environment* env = Environment::GetCurrent(args);
+-
+ Sign* sign;
+ ASSIGN_OR_RETURN_UNWRAP(&sign, args.Holder());
- // Only copy the data if we have to, because it's a string
+- THROW_AND_RETURN_IF_NOT_STRING_OR_BUFFER(args[0], "Data");
+-
+- // Only copy the data if we have to, because it's a string
Error err;
- if (args[0]->IsString()) {
- StringBytes::InlineDecoder decoder;
@@ -1042,7 +1054,7 @@
sign->CheckThrow(err);
}
-@@ -4158,7 +4345,7 @@ SignBase::Error Sign::SignFinal(const ch
+@@ -4158,7 +4333,7 @@ SignBase::Error Sign::SignFinal(const ch
unsigned int* sig_len,
int padding,
int salt_len) {
@@ -1051,7 +1063,7 @@
return kSignNotInitialised;
BIO* bp = nullptr;
-@@ -4203,18 +4390,17 @@ SignBase::Error Sign::SignFinal(const ch
+@@ -4203,18 +4378,17 @@ SignBase::Error Sign::SignFinal(const ch
}
#endif // NODE_FIPS_MODE
@@ -1073,7 +1085,15 @@
if (fatal)
return kSignPrivateKey;
-@@ -4289,21 +4475,6 @@ void Verify::New(const FunctionCallbackI
+@@ -4233,7 +4407,6 @@ void Sign::SignFinal(const FunctionCallb
+
+ node::Utf8Value passphrase(env->isolate(), args[1]);
+
+- THROW_AND_RETURN_IF_NOT_BUFFER(args[0], "Data");
+ size_t buf_len = Buffer::Length(args[0]);
+ char* buf = Buffer::Data(args[0]);
+
+@@ -4289,68 +4462,23 @@ void Verify::New(const FunctionCallbackI
}
@@ -1095,8 +1115,13 @@
void Verify::VerifyInit(const FunctionCallbackInfo<Value>& args) {
Verify* verify;
ASSIGN_OR_RETURN_UNWRAP(&verify, args.Holder());
-@@ -4316,18 +4487,7 @@ void Verify::VerifyInit(const FunctionCa
- THROW_AND_RETURN_IF_NOT_STRING(args[0], "Verify type");
+- Environment* env = verify->env();
+-
+- if (args.Length() == 0) {
+- return env->ThrowError("Verify type argument is mandatory");
+- }
+-
+- THROW_AND_RETURN_IF_NOT_STRING(args[0], "Verify type");
const node::Utf8Value verify_type(args.GetIsolate(), args[0]);
- verify->CheckThrow(verify->VerifyInit(*verify_type));
@@ -1115,9 +1140,15 @@
}
-@@ -4341,16 +4501,9 @@ void Verify::VerifyUpdate(const Function
+ void Verify::VerifyUpdate(const FunctionCallbackInfo<Value>& args) {
+- Environment* env = Environment::GetCurrent(args);
+-
+ Verify* verify;
+ ASSIGN_OR_RETURN_UNWRAP(&verify, args.Holder());
- // Only copy the data if we have to, because it's a string
+- THROW_AND_RETURN_IF_NOT_STRING_OR_BUFFER(args[0], "Data");
+-
+- // Only copy the data if we have to, because it's a string
Error err;
- if (args[0]->IsString()) {
- StringBytes::InlineDecoder decoder;
@@ -1135,7 +1166,7 @@
verify->CheckThrow(err);
}
-@@ -4363,7 +4516,7 @@ SignBase::Error Verify::VerifyFinal(cons
+@@ -4363,7 +4491,7 @@ SignBase::Error Verify::VerifyFinal(cons
int padding,
int saltlen,
bool* verify_result) {
@@ -1144,7 +1175,7 @@
return kSignNotInitialised;
EVP_PKEY* pkey = nullptr;
-@@ -4408,7 +4561,7 @@ SignBase::Error Verify::VerifyFinal(cons
+@@ -4408,7 +4536,7 @@ SignBase::Error Verify::VerifyFinal(cons
goto exit;
}
@@ -1153,7 +1184,7 @@
goto exit;
}
-@@ -4421,7 +4574,7 @@ SignBase::Error Verify::VerifyFinal(cons
+@@ -4421,7 +4549,7 @@ SignBase::Error Verify::VerifyFinal(cons
goto err;
if (!ApplyRSAOptions(pkey, pkctx, padding, saltlen))
goto err;
@@ -1162,7 +1193,7 @@
goto err;
r = EVP_PKEY_verify(pkctx,
reinterpret_cast(sig),
-@@ -4440,8 +4593,8 @@ SignBase::Error Verify::VerifyFinal(cons
+@@ -4440,8 +4568,8 @@ SignBase::Error Verify::VerifyFinal(cons
if (x509 != nullptr)
X509_free(x509);
@@ -1173,7 +1204,20 @@
if (fatal)
return kSignPublicKey;
-@@ -4693,10 +4846,15 @@ bool DiffieHellman::Init(int primeLength
+@@ -4459,12 +4587,9 @@ void Verify::VerifyFinal(const FunctionC
+ Verify* verify;
+ ASSIGN_OR_RETURN_UNWRAP(&verify, args.Holder());
+
+- THROW_AND_RETURN_IF_NOT_BUFFER(args[0], "Key");
+ char* kbuf = Buffer::Data(args[0]);
+ ssize_t klen = Buffer::Length(args[0]);
+
+- THROW_AND_RETURN_IF_NOT_STRING_OR_BUFFER(args[1], "Hash");
+-
+ char* hbuf = Buffer::Data(args[1]);
+ ssize_t hlen = Buffer::Length(args[1]);
+
+@@ -4693,10 +4818,15 @@ bool DiffieHellman::Init(int primeLength
bool DiffieHellman::Init(const char* p, int p_len, int g) {
dh = DH_new();
@@ -1192,7 +1236,7 @@
bool result = VerifyContext();
if (!result)
return false;
-@@ -4707,8 +4865,13 @@ bool DiffieHellman::Init(const char* p,
+@@ -4707,8 +4837,13 @@ bool DiffieHellman::Init(const char* p,
bool DiffieHellman::Init(const char* p, int p_len, const char* g, int g_len) {
dh = DH_new();
@@ -1208,7 +1252,7 @@
bool result = VerifyContext();
if (!result)
return false;
-@@ -4796,22 +4959,25 @@ void DiffieHellman::GenerateKeys(const F
+@@ -4796,22 +4931,25 @@ void DiffieHellman::GenerateKeys(const F
return ThrowCryptoError(env, ERR_get_error(), "Key generation failed");
}
@@ -1238,7 +1282,7 @@
if (num == nullptr) return env->ThrowError(err_if_null);
size_t size = BN_num_bytes(num);
-@@ -4821,24 +4987,38 @@ void DiffieHellman::GetField(const Funct
+@@ -4821,24 +4959,38 @@ void DiffieHellman::GetField(const Funct
}
void DiffieHellman::GetPrime(const FunctionCallbackInfo<Value>& args) {
@@ -1283,7 +1327,7 @@
}
-@@ -4916,14 +5096,13 @@ void DiffieHellman::ComputeSecret(const
+@@ -4916,14 +5068,13 @@ void DiffieHellman::ComputeSecret(const
void DiffieHellman::SetKey(const v8::FunctionCallbackInfov8::Value& args,
@@ -1299,7 +1343,7 @@
char errmsg[64];
if (args.Length() == 0) {
-@@ -4936,19 +5115,29 @@ void DiffieHellman::SetKey(const v8::Fun
+@@ -4936,19 +5087,29 @@ void DiffieHellman::SetKey(const v8::Fun
return env->ThrowTypeError(errmsg);
}
@@ -1334,7 +1378,7 @@
}
-@@ -5736,7 +5925,7 @@ void RandomBytesBuffer(const FunctionCal
+@@ -5736,7 +5897,7 @@ void RandomBytesBuffer(const FunctionCal
void GetSSLCiphers(const FunctionCallbackInfo<Value>& args) {
Environment* env = Environment::GetCurrent(args);
@@ -1343,7 +1387,7 @@
if (ctx == nullptr) {
return env->ThrowError("SSL_CTX_new() failed.");
}
-@@ -6026,9 +6215,11 @@ void InitCryptoOnce() {
+@@ -6026,9 +6187,11 @@ void InitCryptoOnce() {
SSL_library_init();
OpenSSL_add_all_algorithms();
@@ -1842,7 +1886,36 @@
assert(crypto.getHashes().includes('RSA-SHA1'));
assert(!crypto.getHashes().includes('rsa-sha1'));
validateList(crypto.getHashes());
-@@ -257,7 +257,7 @@ assert.throws(function() {
+@@ -199,28 +199,6 @@ assert.throws(function() {
+ });
+
+ assert.throws(function() {
+- crypto.createSign('SHA1').update('0', 'hex');
+-}, (err) => {
+- // Throws TypeError, so there is no opensslErrorStack property.
+- if ((err instanceof Error) &&
+- /^TypeError: Bad input string$/.test(err) &&
+- err.opensslErrorStack === undefined) {
+- return true;
+- }
+-});
+-
+-assert.throws(function() {
+- crypto.createVerify('SHA1').update('0', 'hex');
+-}, (err) => {
+- // Throws TypeError, so there is no opensslErrorStack property.
+- if ((err instanceof Error) &&
+- /^TypeError: Bad input string$/.test(err) &&
+- err.opensslErrorStack === undefined) {
+- return true;
+- }
+-});
+-
+-assert.throws(function() {
+ const priv = [
+ '-----BEGIN RSA PRIVATE KEY-----',
+ 'MIGrAgEAAiEA+3z+1QNF2/unumadiwEr+C5vfhezsb3hp4jAnCNRpPcCAwEAAQIgQNriSQK4',
+@@ -257,7 +235,7 @@ assert.throws(function() {
// Throws crypto error, so there is an opensslErrorStack property.
// The openSSL stack should have content.
if ((err instanceof Error) &&
@@ -2050,7 +2123,7 @@
===================================================================
--- node-v8.9.3.orig/test/parallel/test-tls-econnreset.js
+++ node-v8.9.3/test/parallel/test-tls-econnreset.js
-@@ -25,72 +25,26 @@ if (!common.hasCrypto)
+@@ -25,72 +25,28 @@ if (!common.hasCrypto)
common.skip('missing crypto');
const assert = require('assert');
@@ -2096,9 +2169,9 @@
-
-const ca = [ cert, cacert ];
-
--let clientError = null;
+ let clientError = null;
-let connectError = null;
--
+
-const server = tls.createServer({ ca: ca, cert: cert, key: key }, () => {
- assert.fail('should be unreachable');
-}).on('tlsClientError', function(err, conn) {
@@ -2194,3 +2267,227 @@
'Expecting SSL unknown protocol');
}));
+Index: node-v8.9.3/lib/crypto.js
+===================================================================
+--- node-v8.9.3.orig/lib/crypto.js
++++ node-v8.9.3/lib/crypto.js
+@@ -25,6 +25,7 @@
+ 'use strict';
+
+ const internalUtil = require('internal/util');
++const errors = require('internal/errors');
+ internalUtil.assertCrypto();
+
+ exports.DEFAULT_ENCODING = 'buffer';
+@@ -39,6 +40,8 @@ const getFipsCrypto = binding.getFipsCry
+ const setFipsCrypto = binding.setFipsCrypto;
+ const timingSafeEqual = binding.timingSafeEqual;
+
++function getDefaultEncoding() { return 'buffer'; }
++
+ const Buffer = require('buffer').Buffer;
+ const kBufferMaxLength = require('buffer').kMaxLength;
+ const stream = require('stream');
+@@ -287,6 +290,8 @@ exports.createSign = exports.Sign = Sign
+ function Sign(algorithm, options) {
+ if (!(this instanceof Sign))
+ return new Sign(algorithm, options);
++ if (typeof algorithm !== 'string')
++ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'algorithm', 'string');
+ this._handle = new binding.Sign();
+ this._handle.init(algorithm);
+
+@@ -296,11 +301,20 @@ function Sign(algorithm, options) {
+ util.inherits(Sign, stream.Writable);
+
+ Sign.prototype._write = function _write(chunk, encoding, callback) {
+- this._handle.update(chunk, encoding);
++ this.update(chunk, encoding);
+ callback();
+ };
+
+-Sign.prototype.update = Hash.prototype.update;
++Sign.prototype.update = function update(data, encoding) {
++ encoding = encoding || getDefaultEncoding();
++ data = toBuf(data, encoding);
++ if (!isArrayBufferView(data)) {
++ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'data',
++ ['string', 'Buffer', 'TypedArray', 'DataView']);
++ }
++ this._handle.update(data);
++ return this;
++};
+
+ Sign.prototype.sign = function sign(options, encoding) {
+ if (!options)
+@@ -328,8 +342,13 @@ Sign.prototype.sign = function sign(opti
+ }
+ }
+
+- var ret = this._handle.sign(toBuf(key), passphrase, rsaPadding,
+- pssSaltLength);
++ key = toBuf(key);
++ if (!isArrayBufferView(key)) {
++ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'key',
++ ['string', 'Buffer', 'TypedArray', 'DataView']);
++ }
++
++ var ret = this._handle.sign(key, passphrase, rsaPadding, pssSaltLength);
+
+ encoding = encoding || exports.DEFAULT_ENCODING;
+ if (encoding && encoding !== 'buffer')
+@@ -343,6 +362,8 @@ exports.createVerify = exports.Verify =
+ function Verify(algorithm, options) {
+ if (!(this instanceof Verify))
+ return new Verify(algorithm, options);
++ if (typeof algorithm !== 'string')
++ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'algorithm', 'string');
+
+ this._handle = new binding.Verify();
+ this._handle.init(algorithm);
+@@ -377,9 +398,19 @@ Verify.prototype.verify = function verif
+ throw new TypeError('saltLength must be an integer');
+ }
+ }
++ key = toBuf(key);
++ if (!isArrayBufferView(key)) {
++ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'key',
++ ['string', 'Buffer', 'TypedArray', 'DataView']);
++ }
++
++ signature = toBuf(signature, sigEncoding);
++ if (!isArrayBufferView(signature)) {
++ throw new errors.TypeError('ERR_INVALID_ARG_TYPE', 'signature',
++ ['string', 'Buffer', 'TypedArray', 'DataView']);
++ }
+
+- return this._handle.verify(toBuf(key), toBuf(signature, sigEncoding),
+- rsaPadding, pssSaltLength);
++ return this._handle.verify(key, signature, rsaPadding, pssSaltLength);
+ };
+
+ function rsaPublic(method, defaultPadding) {
+Index: node-v8.9.3/test/parallel/test-crypto-sign-verify.js
+===================================================================
+--- node-v8.9.3.orig/test/parallel/test-crypto-sign-verify.js
++++ node-v8.9.3/test/parallel/test-crypto-sign-verify.js
+@@ -271,3 +271,106 @@ const modSize = 1024;
+ assert(stdout.includes('Verified OK'));
+ }));
+ }
++
++[1, [], {}, undefined, null, true, Infinity].forEach((i) => {
++ common.expectsError(
++ () => crypto.createSign(),
++ {
++ code: 'ERR_INVALID_ARG_TYPE',
++ type: TypeError,
++ message: 'The "algorithm" argument must be of type string'
++ }
++ );
++ common.expectsError(
++ () => crypto.createVerify(),
++ {
++ code: 'ERR_INVALID_ARG_TYPE',
++ type: TypeError,
++ message: 'The "algorithm" argument must be of type string'
++ }
++ );
++});
++{
++ const sign = crypto.createSign('SHA1');
++ const verify = crypto.createVerify('SHA1');
++
++ [1, [], {}, undefined, null, true, Infinity].forEach((i) => {
++ common.expectsError(
++ () => sign.update(i),
++ {
++ code: 'ERR_INVALID_ARG_TYPE',
++ type: TypeError,
++ message: 'The "data" argument must be one of type string, Buffer, ' +
++ 'TypedArray, or DataView'
++ }
++ );
++ common.expectsError(
++ () => verify.update(i),
++ {
++ code: 'ERR_INVALID_ARG_TYPE',
++ type: TypeError,
++ message: 'The "data" argument must be one of type string, Buffer, ' +
++ 'TypedArray, or DataView'
++ }
++ );
++ common.expectsError(
++ () => sign._write(i, 'utf8', () => {}),
++ {
++ code: 'ERR_INVALID_ARG_TYPE',
++ type: TypeError,
++ message: 'The "data" argument must be one of type string, Buffer, ' +
++ 'TypedArray, or DataView'
++ }
++ );
++ common.expectsError(
++ () => verify._write(i, 'utf8', () => {}),
++ {
++ code: 'ERR_INVALID_ARG_TYPE',
++ type: TypeError,
++ message: 'The "data" argument must be one of type string, Buffer, ' +
++ 'TypedArray, or DataView'
++ }
++ );
++ });
++
++ [
++ Uint8Array, Uint16Array, Uint32Array, Float32Array, Float64Array
++ ].forEach((i) => {
++ // These should all just work
++ sign.update(new i());
++ verify.update(new i());
++ });
++
++ [1, {}, [], Infinity].forEach((i) => {
++ common.expectsError(
++ () => sign.sign(i),
++ {
++ code: 'ERR_INVALID_ARG_TYPE',
++ type: TypeError,
++ message: 'The "key" argument must be one of type string, Buffer, ' +
++ 'TypedArray, or DataView'
++ }
++ );
++
++ common.expectsError(
++ () => verify.verify(i),
++ {
++ code: 'ERR_INVALID_ARG_TYPE',
++ type: TypeError,
++ message: 'The "key" argument must be one of type string, Buffer, ' +
++ 'TypedArray, or DataView'
++ }
++ );
++
++ common.expectsError(
++ () => verify.verify('test', i),
++ {
++ code: 'ERR_INVALID_ARG_TYPE',
++ type: TypeError,
++ message: 'The "signature" argument must be one of type string, ' +
++ 'Buffer, TypedArray, or DataView'
++ }
++ );
++ });
++}
++
+Index: node-v8.9.3/test/parallel/test-tls-env-bad-extra-ca.js
+===================================================================
+--- node-v8.9.3.orig/test/parallel/test-tls-env-bad-extra-ca.js
++++ node-v8.9.3/test/parallel/test-tls-env-bad-extra-ca.js
+@@ -32,7 +32,7 @@ fork(__filename, opts)
+ assert.strictEqual(status, 0, 'client did not succeed in connecting');
+ }))
+ .on('close', common.mustCall(function() {
+- const re = /Warning: Ignoring extra certs from.*no-such-file-exists.* load failed:.*No such file or directory/;
++ const re = /Warning: Ignoring extra certs from.*no-such-file-exists.* load failed:.*/;
+ assert(re.test(stderr), stderr);
+ }))
+ .stderr.setEncoding('utf8').on('data', function(str) {
++++++ versioned.patch ++++++
--- /var/tmp/diff_new_pack.rN8rXW/_old 2018-01-06 18:52:23.558250947 +0100
+++ /var/tmp/diff_new_pack.rN8rXW/_new 2018-01-06 18:52:23.562250760 +0100
@@ -8,11 +8,11 @@
This is also important for generation of binary
modules for multiple versions of NodeJS
-Index: node-v8.9.1/Makefile
+Index: node-v8.9.3/Makefile
===================================================================
---- node-v8.9.1.orig/Makefile
-+++ node-v8.9.1/Makefile
-@@ -45,10 +45,10 @@ BUILDTYPE_LOWER := $(shell echo $(BUILDT
+--- node-v8.9.3.orig/Makefile
++++ node-v8.9.3/Makefile
+@@ -45,7 +45,7 @@ BUILDTYPE_LOWER := $(shell echo $(BUILDT
EXEEXT := $(shell $(PYTHON) -c \
"import sys; print('.exe' if sys.platform == 'win32' else '')")
@@ -20,15 +20,11 @@
+NODE_EXE = node8$(EXEEXT)
NODE ?= ./$(NODE_EXE)
NODE_G_EXE = node_g$(EXEEXT)
--NPM ?= ./deps/npm/bin/npm-cli.js
-+NPM ?= ./deps/npm8/bin/npm-cli.js
-
- # Flags for packaging.
- BUILD_DOWNLOAD_FLAGS ?= --download=all
-Index: node-v8.9.1/tools/install.py
+ NPM ?= ./deps/npm/bin/npm-cli.js
+Index: node-v8.9.3/tools/install.py
===================================================================
---- node-v8.9.1.orig/tools/install.py
-+++ node-v8.9.1/tools/install.py
+--- node-v8.9.3.orig/tools/install.py
++++ node-v8.9.3/tools/install.py
@@ -78,7 +78,7 @@ def install(paths, dst): map(lambda path
def uninstall(paths, dst): map(lambda path: try_remove(path, dst), paths)
@@ -129,10 +125,10 @@
def run(args):
global node_prefix, install_path, target_defaults, variables
-Index: node-v8.9.1/doc/node.1
+Index: node-v8.9.3/doc/node.1
===================================================================
---- node-v8.9.1.orig/doc/node.1
-+++ node-v8.9.1/doc/node.1
+--- node-v8.9.3.orig/doc/node.1
++++ node-v8.9.3/doc/node.1
@@ -26,12 +26,12 @@
.SH NAME
@@ -165,10 +161,10 @@
.RB [ \-\-v8-options ]
Execute without arguments to start the REPL.
-Index: node-v8.9.1/src/node.stp
+Index: node-v8.9.3/src/node.stp
===================================================================
---- node-v8.9.1.orig/src/node.stp
-+++ node-v8.9.1/src/node.stp
+--- node-v8.9.3.orig/src/node.stp
++++ node-v8.9.3/src/node.stp
@@ -19,7 +19,7 @@
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -241,10 +237,10 @@
{
scavenge = 1 << 0;
compact = 1 << 1;
-Index: node-v8.9.1/deps/npm/man/man1/npm.1
+Index: node-v8.9.3/deps/npm/man/man1/npm.1
===================================================================
---- node-v8.9.1.orig/deps/npm/man/man1/npm.1
-+++ node-v8.9.1/deps/npm/man/man1/npm.1
+--- node-v8.9.3.orig/deps/npm/man/man1/npm.1
++++ node-v8.9.3/deps/npm/man/man1/npm.1
@@ -1,11 +1,11 @@
.TH "NPM" "1" "October 2017" "" ""
.SH "NAME"
@@ -374,10 +370,10 @@
.RE
-Index: node-v8.9.1/node.gyp
+Index: node-v8.9.3/node.gyp
===================================================================
---- node-v8.9.1.orig/node.gyp
-+++ node-v8.9.1/node.gyp
+--- node-v8.9.3.orig/node.gyp
++++ node-v8.9.3/node.gyp
@@ -20,7 +20,7 @@
'node_shared_openssl%': 'false',
'node_v8_options%': '',
@@ -387,7 +383,7 @@
'library_files': [
'lib/internal/bootstrap_node.js',
'lib/async_hooks.js',
-@@ -488,10 +488,10 @@
+@@ -486,10 +486,10 @@
{
'action_name': 'node_dtrace_provider_o',
'inputs': [
@@ -400,7 +396,7 @@
],
'action': [ 'dtrace', '-G', '-xnolibs', '-s', 'src/node_provider.d',
'<@(_inputs)', '-o', '<@(_outputs)' ]
-@@ -541,7 +541,7 @@
+@@ -539,7 +539,7 @@
'<(SHARED_INTERMEDIATE_DIR)/v8constants.h'
],
'outputs': [
@@ -409,7 +405,7 @@
],
'conditions': [
[ 'target_arch=="ia32" or target_arch=="arm"', {
-@@ -602,9 +602,9 @@
+@@ -600,9 +600,9 @@
],
'variables': {
@@ -422,7 +418,7 @@
'OBJ_SUFFIX': 'o',
'OBJ_SEPARATOR': '/',
'conditions': [
-@@ -740,7 +740,7 @@
+@@ -738,7 +738,7 @@
['OS=="aix"', {
'targets': [
{
@@ -431,20 +427,20 @@
'conditions': [
['node_shared=="true"', {
'type': 'shared_library',
-Index: node-v8.9.1/deps/npm/bin/npm-cli.js
+Index: node-v8.9.3/deps/npm/bin/npm-cli.js
===================================================================
---- node-v8.9.1.orig/deps/npm/bin/npm-cli.js
-+++ node-v8.9.1/deps/npm/bin/npm-cli.js
+--- node-v8.9.3.orig/deps/npm/bin/npm-cli.js
++++ node-v8.9.3/deps/npm/bin/npm-cli.js
@@ -1,4 +1,4 @@
-#!/usr/bin/env node
+#!/usr/bin/env node8
;(function () { // wrapper in case we're in module_context mode
// windows: running "npm blah" in this folder will invoke WSH, not node.
/*global WScript*/
-Index: node-v8.9.1/src/node_main.cc
+Index: node-v8.9.3/src/node_main.cc
===================================================================
---- node-v8.9.1.orig/src/node_main.cc
-+++ node-v8.9.1/src/node_main.cc
+--- node-v8.9.3.orig/src/node_main.cc
++++ node-v8.9.3/src/node_main.cc
@@ -101,6 +101,7 @@ int main(int argc, char *argv[]) {
#endif
// Disable stdio buffering, it interacts poorly with printf()
@@ -453,3 +449,16 @@
setvbuf(stdout, nullptr, _IONBF, 0);
setvbuf(stderr, nullptr, _IONBF, 0);
return node::Start(argc, argv);
+Index: node-v8.9.3/tools/test.py
+===================================================================
+--- node-v8.9.3.orig/tools/test.py
++++ node-v8.9.3/tools/test.py
+@@ -906,7 +906,7 @@ class Context(object):
+
+ def GetVm(self, arch, mode):
+ if arch == 'none':
+- name = 'out/Debug/node' if mode == 'debug' else 'out/Release/node'
++ name = 'out/Debug/node' if mode == 'debug' else 'out/Release/node8'
+ else:
+ name = 'out/%s.%s/node' % (arch, mode)
+