From 1a5780e35eff803fe5bf98a21076bb55d014f69d Mon Sep 17 00:00:00 2001 From: eordano Date: Wed, 18 Feb 2015 11:53:22 -0300 Subject: [PATCH] Script/Address: Add check for valid number of threshold needed --- lib/script/script.js | 2 ++ test/address.js | 6 ++++++ test/script/script.js | 6 ++++++ 3 files changed, 14 insertions(+) diff --git a/lib/script/script.js b/lib/script/script.js index 321ffc0..0962db9 100644 --- a/lib/script/script.js +++ b/lib/script/script.js @@ -543,6 +543,8 @@ Script.prototype.removeCodeseparators = function() { * public keys before creating the script */ Script.buildMultisigOut = function(publicKeys, threshold, opts) { + $.checkArgument(threshold <= publicKeys.length, + 'Number of required signatures must be less than or equal to the number of public keys'); opts = opts || {}; var script = new Script(); script.add(Opcode.smallInt(threshold)); diff --git a/test/address.js b/test/address.js index 85c7fc3..f857308 100644 --- a/test/address.js +++ b/test/address.js @@ -499,6 +499,12 @@ describe('Address', function() { var address2 = Address.createMultisig(publics, 2); address.toString().should.equal(address2.toString()); }); + + it('fails if invalid array is provided', function() { + expect(function() { + return Address.createMultisig([],3,'testnet'); + }).to.throw('Number of required signatures must be less than or equal to the number of public keys'); + }); }); }); diff --git a/test/script/script.js b/test/script/script.js index a3c6d1d..5896bdc 100644 --- a/test/script/script.js +++ b/test/script/script.js @@ -430,6 +430,12 @@ describe('Script', function() { s.toString().should.equal('OP_2 33 0x021f2f6e1e50cb6a953935c3601284925decd3fd21bc445712576873fb8c6ebc18 33 0x022df8750480ad5b26950b25c7ba79d3e37d75f640f8e5d9bcd5b150a0f85014da 33 0x03e3818b65bcc73a7d64064106a859cc1a5a728c4345ff0b641209fba0d90de6e9 OP_3 OP_CHECKMULTISIG'); s.isMultisigOut().should.equal(true); }); + it('should fail when number of required signatures is greater than number of pubkeys', function() { + expect(sortkeys.length).to.equal(3); + expect(function() { + return Script.buildMultisigOut(sortkeys, 4); + }).to.throw('Number of required signatures must be less than or equal to the number of public keys'); + }); it('should create unsorted script if specified', function() { var s = Script.buildMultisigOut(sortkeys, 2); var u = Script.buildMultisigOut(sortkeys, 2, {