Skip to content

Commit

Permalink
test: simplify regression test for SEGV
Browse files Browse the repository at this point in the history
Test was introduced in 08a5b44 as a regression test, and has evolved
since then. Simplify the test so that it doesn't rely on an undocumented
argument to tls.createSecureCredentials().

See: nodejs/node-v0.x-archive#6690

Confirmation that this reworked test triggers the original bug:

	%) % node
	> process.version
	'v0.10.48'
	> credentials = crypto.createCredentials()
	{ context: {} }
	> context = credentials.context
	{}
	> notcontext = { setOptions: context.setOptions }
	{ setOptions: [Function: setOptions] }
	> notcontext.setOptions()
	node: ../src/node_object_wrap.h:61: static T* node::ObjectWrap::Unwrap(v8::Handle<v8::Object>) [with T = node::crypto::SecureContext]: Assertion `handle->InternalFieldCount() > 0' failed.
	zsh: abort (core dumped)  node

PR-URL: #24241
Reviewed-By: Anna Henningsen <anna@addaleax.net>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
  • Loading branch information
sam-github authored and Trott committed Nov 10, 2018
1 parent 3ffc84a commit 624a242
Showing 1 changed file with 7 additions and 7 deletions.
14 changes: 7 additions & 7 deletions test/parallel/test-crypto.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,19 +38,19 @@ const tls = require('tls');
const fixtures = require('../common/fixtures');

// Test Certificates
const caPem = fixtures.readSync('test_ca.pem', 'ascii');
const certPem = fixtures.readSync('test_cert.pem', 'ascii');
const certPfx = fixtures.readSync('test_cert.pfx');
const keyPem = fixtures.readSync('test_key.pem', 'ascii');

// 'this' safety
// https://github.com/joyent/node/issues/6690
assert.throws(function() {
const options = { key: keyPem, cert: certPem, ca: caPem };
const credentials = tls.createSecureContext(options);
const credentials = tls.createSecureContext();
const context = credentials.context;
const notcontext = { setOptions: context.setOptions, setKey: context.setKey };
tls.createSecureContext({ secureOptions: 1 }, notcontext);
const notcontext = { setOptions: context.setOptions };

// Methods of native objects should not segfault when reassigned to a new
// object and called illegally. This core dumped in 0.10 and was fixed in
// 0.11.
notcontext.setOptions();
}, (err) => {
// Throws TypeError, so there is no opensslErrorStack property.
if ((err instanceof Error) &&
Expand Down

0 comments on commit 624a242

Please sign in to comment.