Add option to check stream in object.validate

This commit is contained in:
Kagami Hiiragi 2015-03-07 00:35:30 +03:00
parent 956d58ce2f
commit f29f32b3aa
2 changed files with 24 additions and 4 deletions

View File

@ -367,7 +367,7 @@ var object = exports.object = {
var decodedStream = var_int.decode(decodedVersion.rest); var decodedStream = var_int.decode(decodedVersion.rest);
var headerLength = 20 + decodedVersion.length + decodedStream.length; var headerLength = 20 + decodedVersion.length + decodedStream.length;
if (opts._validate) { return; } if (opts._validate) { return {stream: decodedStream.value}; }
var objectPayload = new Buffer(decodedStream.rest.length); var objectPayload = new Buffer(decodedStream.rest.length);
decodedStream.rest.copy(objectPayload); decodedStream.rest.copy(objectPayload);
@ -387,7 +387,8 @@ var object = exports.object = {
* Check whether given `object` message is valid. * Check whether given `object` message is valid.
* @param {Buffer} buf - Message * @param {Buffer} buf - Message
* @param {Object=} opts - Any of [object.decode]{@link * @param {Object=} opts - Any of [object.decode]{@link
* module:bitmessage/structs.object.decode} options * module:bitmessage/structs.object.decode} options and:
* @param {number} opts.stream - Expected object's stream
* @return {?Error} Return an error with description if object is * @return {?Error} Return an error with description if object is
* invalid. * invalid.
*/ */
@ -411,11 +412,18 @@ var object = exports.object = {
*/ */
validatePayload: function(buf, opts) { validatePayload: function(buf, opts) {
opts = objectAssign({}, opts, {_validate: true}); opts = objectAssign({}, opts, {_validate: true});
var decoded;
try { try {
object.decodePayload(buf, opts); decoded = object.decodePayload(buf, opts);
} catch(e) { } catch(e) {
return e; return e;
} }
if (opts.stream && decoded.stream !== opts.stream) {
return new Error(
"The stream number " + opts.stream +
" is not the one we are interested in"
);
}
}, },
/** /**

14
test.js
View File

@ -261,7 +261,19 @@ describe("Common structures", function() {
err = object.validatePayload(obj); err = object.validatePayload(obj);
expect(err.message).to.match(/insufficient pow/i); expect(err.message).to.match(/insufficient pow/i);
expect(object.validatePayload(obj, {skipPow: true})).to.not.exist; expect(object.validatePayload(obj, skipPow)).to.not.exist;
});
it("should allow to validate stream", function() {
var obj = object.encodePayload({
nonce: Buffer(8),
ttl: 111,
type: object.MSG,
version: 1,
objectPayload: Buffer(0),
});
var err = object.validatePayload(obj, {skipPow: true, stream: 3});
expect(err.message).to.match(/stream.*is not the one/i);
}); });
}); });