From 0e0a0db2eb581842cb08b906cda28ce992d456b6 Mon Sep 17 00:00:00 2001 From: Matt Bell Date: Sun, 5 Jul 2015 17:22:05 -0700 Subject: [PATCH 1/2] Add test to catch problems with large bloom filter deserialization --- test/bloomfilter.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/bloomfilter.js b/test/bloomfilter.js index aa9c410..ab79556 100644 --- a/test/bloomfilter.js +++ b/test/bloomfilter.js @@ -79,4 +79,10 @@ describe('BloomFilter', function() { assert(filter.contains(ParseHex('b9300670b4c5366e95b2699e8b18bc75e5f729c5'))); }); + it('#toBuffer and #fromBuffer round trip, with a large filter', function() { + var filter = BloomFilter.create(10000, 0.001); + var buffer = filter.toBuffer(); + new BloomFilter.fromBuffer(buffer).should.deep.equal(filter); + }); + }); From 6180e12f9c4941aa655c0ed4a5371c8ce395848c Mon Sep 17 00:00:00 2001 From: Matt Bell Date: Sun, 5 Jul 2015 17:22:32 -0700 Subject: [PATCH 2/2] Use varint instead of uint8 for bloom filter data length --- lib/bloomfilter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/bloomfilter.js b/lib/bloomfilter.js index ef1bd83..befde2e 100644 --- a/lib/bloomfilter.js +++ b/lib/bloomfilter.js @@ -13,7 +13,7 @@ var BufferWriter = bitcore.encoding.BufferWriter; BloomFilter.fromBuffer = function fromBuffer(payload) { var obj = {}; var parser = new BufferReader(payload); - var length = parser.readUInt8(); + var length = parser.readVarintNum(); obj.vData = []; for(var i = 0; i < length; i++) { obj.vData.push(parser.readUInt8());