From 58d8e3ce53a1381a4200f403075e4509ea857fbc Mon Sep 17 00:00:00 2001 From: Christopher Jeffrey Date: Wed, 23 Dec 2015 03:39:47 -0800 Subject: [PATCH] fix coinbase parsing. --- lib/bcoin/script.js | 10 +++++++++- lib/bcoin/utils.js | 16 ++++++++++++---- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/bcoin/script.js b/lib/bcoin/script.js index 4e7fe717..87578ed4 100644 --- a/lib/bcoin/script.js +++ b/lib/bcoin/script.js @@ -1161,6 +1161,10 @@ script.isScripthashInput = function isScripthashInput(s, redeem) { script.coinbaseBits = function coinbaseBits(s, block) { var value; + s = s.filter(function(chunk) { + return Array.isArray(chunk) && chunk.length !== 0; + }); + if (!Array.isArray(s[0])) return { type: 'value', value: s[0] }; @@ -1198,6 +1202,10 @@ script.coinbaseHeight = function coinbaseHeight(s, block) { script.coinbase = function coinbase(s, block) { var coinbase, data, nonce, flags; + s = s.filter(function(chunk) { + return Array.isArray(chunk) && chunk.length !== 0; + }); + coinbase = { script: s, raw: s._raw || script.encode(s) @@ -1213,7 +1221,7 @@ script.coinbase = function coinbase(s, block) { coinbase[data.type] = data.value; coinbase.nonce = nonce; coinbase.flags = flags; - coinbase.text = utils.array2utf8(flags); + coinbase.text = flags.map(utils.array2utf8); return coinbase; }; diff --git a/lib/bcoin/utils.js b/lib/bcoin/utils.js index 6e7beba8..87e3cb6e 100644 --- a/lib/bcoin/utils.js +++ b/lib/bcoin/utils.js @@ -309,13 +309,21 @@ utils.writeAscii = function writeAscii(dst, str, off) { return i; }; -utils.readAscii = function readAscii(arr, off, len) { +utils.readAscii = function readAscii(arr, off, len, printable) { var str = ''; var i = off; var c; for (i = off; i < off + len; i++) { - c = String.fromCharCode(arr[i] & 0xff); + if (printable) { + c = arr[i] & 0xff; + if (c === 0x09 || c === 0x0a || c === 0x0d || (c > 0x1f && c < 0x7f)) + c = String.fromCharCode(c); + else + c = ''; + } else { + c = String.fromCharCode(arr[i] & 0xff); + } str += c; } @@ -328,8 +336,8 @@ utils.ascii2array = function ascii2array(str) { return dst; }; -utils.array2ascii = function array2ascii(arr) { - return utils.readAscii(arr, 0, arr.length); +utils.array2ascii = function array2ascii(arr, printable) { + return utils.readAscii(arr, 0, arr.length, true); }; utils.array2utf8 = function array2utf8(arr) {