From d0526dce495c2119606dc5b735d617111b80dd9b Mon Sep 17 00:00:00 2001 From: Keichi Takahashi Date: Wed, 10 Jan 2018 16:15:11 +0900 Subject: [PATCH 1/3] Use Buffer.from() instead of ctor --- example/ip.js | 2 +- example/tcp.js | 2 +- lib/binary_parser.js | 10 +---- test/composite_parser.js | 97 +++++++++++++++++++++++++--------------- test/primitive_parser.js | 49 +++++++++++--------- 5 files changed, 94 insertions(+), 66 deletions(-) diff --git a/example/ip.js b/example/ip.js index 5ad56d4f..9c7d70ce 100644 --- a/example/ip.js +++ b/example/ip.js @@ -21,6 +21,6 @@ var ipHeader = new Parser() length: 4 }); -var buf = new Buffer("450002c5939900002c06ef98adc24f6c850186d1", "hex"); +var buf = Buffer.from("450002c5939900002c06ef98adc24f6c850186d1", "hex"); console.log(ipHeader.parse(buf)); diff --git a/example/tcp.js b/example/tcp.js index e608903b..d227657e 100644 --- a/example/tcp.js +++ b/example/tcp.js @@ -21,7 +21,7 @@ var tcpHeader = new Parser() .uint16("checksum") .uint16("urgentPointer"); -var buf = new Buffer( +var buf = Buffer.from( "e8a203e108e177e13d20756b801829d3004100000101080a2ea486ba793310bc", "hex" ); diff --git a/lib/binary_parser.js b/lib/binary_parser.js index 1bccc343..989b60f6 100644 --- a/lib/binary_parser.js +++ b/lib/binary_parser.js @@ -582,15 +582,7 @@ Parser.prototype.generateBuffer = function(ctx) { } if (this.options.clone) { - var buf = ctx.generateTmpVariable(); - - ctx.pushCode( - "var {0} = new Buffer({1}.length);", - buf, - ctx.generateVariable(this.varName) - ); - ctx.pushCode("{0}.copy({1});", ctx.generateVariable(this.varName), buf); - ctx.pushCode("{0} = {1}", ctx.generateVariable(this.varName), buf); + ctx.pushCode("{0} = Buffer.from({0});", ctx.generateVariable(this.varName)); } }; diff --git a/test/composite_parser.js b/test/composite_parser.js index 7500bb48..5507a040 100644 --- a/test/composite_parser.js +++ b/test/composite_parser.js @@ -12,7 +12,7 @@ describe("Composite parser", function() { type: "uint8" }); - var buffer = new Buffer([12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]); + var buffer = Buffer.from([12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]); assert.deepEqual(parser.parse(buffer), { length: 12, message: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] @@ -26,7 +26,7 @@ describe("Composite parser", function() { type: "uint8" }); - var buffer = new Buffer([12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]); + var buffer = Buffer.from([12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]); assert.deepEqual(parser.parse(buffer), { length: 12, message: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] @@ -42,7 +42,16 @@ describe("Composite parser", function() { type: elementParser }); - var buffer = new Buffer([0x02, 0x00, 0xca, 0xd2, 0x04, 0xbe, 0xd3, 0x04]); + var buffer = Buffer.from([ + 0x02, + 0x00, + 0xca, + 0xd2, + 0x04, + 0xbe, + 0xd3, + 0x04 + ]); assert.deepEqual(parser.parse(buffer), { length: 0x02, message: [{ key: 0xca, value: 1234 }, { key: 0xbe, value: 1235 }] @@ -58,7 +67,16 @@ describe("Composite parser", function() { type: elementParser }); - var buffer = new Buffer([0x06, 0x00, 0xca, 0xd2, 0x04, 0xbe, 0xd3, 0x04]); + var buffer = Buffer.from([ + 0x06, + 0x00, + 0xca, + 0xd2, + 0x04, + 0xbe, + 0xd3, + 0x04 + ]); assert.deepEqual(parser.parse(buffer), { length: 0x06, message: [{ key: 0xca, value: 1234 }, { key: 0xbe, value: 1235 }] @@ -72,7 +90,7 @@ describe("Composite parser", function() { type: elementParser }); - var buffer = new Buffer([0xca, 0xd2, 0x04, 0xbe, 0xd3, 0x04]); + var buffer = Buffer.from([0xca, 0xd2, 0x04, 0xbe, 0xd3, 0x04]); assert.deepEqual(parser.parse(buffer), { message: [{ key: 0xca, value: 1234 }, { key: 0xbe, value: 1235 }] }); @@ -89,7 +107,16 @@ describe("Composite parser", function() { type: elementParser }); - var buffer = new Buffer([0x06, 0x00, 0xca, 0xd2, 0x04, 0xbe, 0xd3, 0x04]); + var buffer = Buffer.from([ + 0x06, + 0x00, + 0xca, + 0xd2, + 0x04, + 0xbe, + 0xd3, + 0x04 + ]); assert.deepEqual(parser.parse(buffer), { length: 0x06, message: [{ key: 0xca, value: 1234 }, { key: 0xbe, value: 1235 }] @@ -110,7 +137,7 @@ describe("Composite parser", function() { type: rowParser }); - var buffer = new Buffer(1 + 10 * (1 + 5 * 4)); + var buffer = Buffer.alloc(1 + 10 * (1 + 5 * 4)); var i, j; iterator = 0; @@ -147,7 +174,7 @@ describe("Composite parser", function() { type: "uint8" }); - var buffer = new Buffer([ + var buffer = Buffer.from([ 0xff, 0xff, 0xff, @@ -171,7 +198,7 @@ describe("Composite parser", function() { type: "uint8" }); - var buffer = new Buffer([ + var buffer = Buffer.from([ 0xff, 0xff, 0xff, @@ -195,7 +222,7 @@ describe("Composite parser", function() { type: "uint8" }); - var buffer = new Buffer([ + var buffer = Buffer.from([ 0xff, 0xff, 0xff, @@ -223,7 +250,7 @@ describe("Composite parser", function() { key: "name" }); - var buffer = new Buffer([ + var buffer = Buffer.from([ 0x02, 0xd2, 0x04, @@ -283,7 +310,7 @@ describe("Composite parser", function() { } }); - var buffer = new Buffer([0x0a, 0x0a, 0x01, 0x6e]); + var buffer = Buffer.from([0x0a, 0x0a, 0x01, 0x6e]); assert.deepEqual(parser.parse(buffer), { data: "10.10.1.110" }); @@ -297,7 +324,7 @@ describe("Composite parser", function() { length: "length" }); - var buffer = new Buffer([1, 1, 1, 0]); + var buffer = Buffer.from([1, 1, 1, 0]); assert.deepEqual(parser.parse(buffer), { length: 1, data: [ @@ -332,7 +359,7 @@ describe("Composite parser", function() { // / // 0 - var buffer = new Buffer([ + var buffer = Buffer.from([ 2, /* 0 */ 3, /* 0 */ 1, @@ -385,13 +412,13 @@ describe("Composite parser", function() { .uint8("version") .nest("child", { type: ChildParser }); - var buffer = new Buffer([0x1, 0x2]); + var buffer = Buffer.from([0x1, 0x2]); assert.deepEqual(ParentParser.parse(buffer), { version: 1, child: { data: { v1: 2 } } }); - buffer = new Buffer([0x2, 0x3, 0x4]); + buffer = Buffer.from([0x2, 0x3, 0x4]); assert.deepEqual(ParentParser.parse(buffer), { version: 2, child: { data: { v2: 0x0304 } } @@ -419,7 +446,7 @@ describe("Composite parser", function() { } }); - var buffer = new Buffer([0x0, 0x4e, 0x61, 0xbc, 0x00, 0x01, 0xd2, 0x04]); + var buffer = Buffer.from([0x0, 0x4e, 0x61, 0xbc, 0x00, 0x01, 0xd2, 0x04]); assert.deepEqual(parser.parse(buffer), { tag1: 0, data1: 12345678, @@ -440,7 +467,7 @@ describe("Composite parser", function() { }) .int32le("test"); - buffer = new Buffer([0x03, 0xff, 0x2f, 0xcb, 0x04, 0x0]); + buffer = Buffer.from([0x03, 0xff, 0x2f, 0xcb, 0x04, 0x0]); assert.deepEqual(parser.parse(buffer), { tag: 3, data: 0xff, @@ -460,7 +487,7 @@ describe("Composite parser", function() { } }); - var buffer = new Buffer([ + var buffer = Buffer.from([ 0x1, 0xc, 0x68, @@ -483,7 +510,7 @@ describe("Composite parser", function() { message: "hello, world" } }); - buffer = new Buffer([0x03, 0x4e, 0x61, 0xbc, 0x00]); + buffer = Buffer.from([0x03, 0x4e, 0x61, 0xbc, 0x00]); assert.deepEqual(parser.parse(buffer), { tag: 3, data: { @@ -505,7 +532,7 @@ describe("Composite parser", function() { } }); - var buffer = new Buffer([1, 1, 1, 0]); + var buffer = Buffer.from([1, 1, 1, 0]); assert.deepEqual(parser.parse(buffer), { type: 1, data: { @@ -534,7 +561,7 @@ describe("Composite parser", function() { } }); - var buffer = new Buffer([2, /* left */ 1, 1, 0, /* right */ 0]); + var buffer = Buffer.from([2, /* left */ 1, 1, 0, /* right */ 0]); assert.deepEqual(parser.parse(buffer), { type: 2, data: { @@ -565,7 +592,7 @@ describe("Composite parser", function() { } }); - var buffer = new Buffer([2, /* left */ 1, 1, 0, /* right */ 0]); + var buffer = Buffer.from([2, /* left */ 1, 1, 0, /* right */ 0]); assert.deepEqual(parser.parse(buffer), { type: 2, data: { @@ -595,7 +622,7 @@ describe("Composite parser", function() { } }); - var buffer = new Buffer([2, /* left */ 1, 1, 0, /* right */ 0]); + var buffer = Buffer.from([2, /* left */ 1, 1, 0, /* right */ 0]); assert.deepEqual(parser.parse(buffer), { type: 2, data: { @@ -638,7 +665,7 @@ describe("Composite parser", function() { // / // 0 - var buffer = new Buffer([ + var buffer = Buffer.from([ 2, /* left -> */ 3, /* one -> */ 1, @@ -696,8 +723,8 @@ describe("Composite parser", function() { }); var buffer = Buffer.concat([ - new Buffer("John\0Doe\0"), - new Buffer([0x20]) + Buffer.from("John\0Doe\0"), + Buffer.from([0x20]) ]); assert.deepEqual(personParser.parse(buffer), { name: { @@ -725,7 +752,7 @@ describe("Composite parser", function() { } }); - var buffer = new Buffer("John\0Doe\0"); + var buffer = Buffer.from("John\0Doe\0"); assert.deepEqual(personParser.parse(buffer), { name: "John Doe" }); @@ -743,7 +770,7 @@ describe("Composite parser", function() { } }); - var buffer = new Buffer("John\0Doe\0"); + var buffer = Buffer.from("John\0Doe\0"); assert.deepEqual(bufferParser.parse(buffer), { buf: buffer }); }); }); @@ -762,7 +789,7 @@ describe("Composite parser", function() { zeroTerminated: true }); - var buffer = new Buffer("John Doe\0"); + var buffer = Buffer.from("John Doe\0"); var person = parser.parse(buffer); assert.ok(person instanceof Person); assert.equal(person.name, "John Doe"); @@ -790,12 +817,12 @@ describe("Composite parser", function() { zeroTerminated: true, assert: "hello, world" }); - var buffer = new Buffer("68656c6c6f2c20776f726c6400", "hex"); + var buffer = Buffer.from("68656c6c6f2c20776f726c6400", "hex"); assert.doesNotThrow(function() { parser.parse(buffer); }); - buffer = new Buffer("68656c6c6f2c206a7300", "hex"); + buffer = Buffer.from("68656c6c6f2c206a7300", "hex"); assert.throws(function() { parser.parse(buffer); }); @@ -809,11 +836,11 @@ describe("Composite parser", function() { } }); - buffer = new Buffer("d2042e16001b", "hex"); + buffer = Buffer.from("d2042e16001b", "hex"); assert.doesNotThrow(function() { parser.parse(buffer); }); - buffer = new Buffer("2e16001bd204", "hex"); + buffer = Buffer.from("2e16001bd204", "hex"); assert.throws(function() { parser.parse(buffer); }); @@ -822,7 +849,7 @@ describe("Composite parser", function() { describe("Parse other fields after bit", function() { it("Parse uint8", function() { - var buffer = new Buffer([0, 1, 0, 4]); + var buffer = Buffer.from([0, 1, 0, 4]); for (var i = 17; i <= 24; i++) { var parser = Parser.start() ["bit" + i]("a") diff --git a/test/primitive_parser.js b/test/primitive_parser.js index 5fb624c7..acd59f96 100644 --- a/test/primitive_parser.js +++ b/test/primitive_parser.js @@ -7,7 +7,7 @@ describe("Primitive parser", function() { it("should nothing", function() { var parser = Parser.start(); - var buffer = new Buffer([0xa, 0x14, 0x1e, 0x28, 0x32]); + var buffer = Buffer.from([0xa, 0x14, 0x1e, 0x28, 0x32]); assert.deepEqual(parser.parse(buffer), {}); }); it("should parse integer types", function() { @@ -16,7 +16,7 @@ describe("Primitive parser", function() { .int16le("b") .uint32be("c"); - var buffer = new Buffer([0x00, 0xd2, 0x04, 0x00, 0xbc, 0x61, 0x4e]); + var buffer = Buffer.from([0x00, 0xd2, 0x04, 0x00, 0xbc, 0x61, 0x4e]); assert.deepEqual(parser.parse(buffer), { a: 0, b: 1234, c: 12345678 }); }); it("should use formatter to transform parsed integer", function() { @@ -32,7 +32,7 @@ describe("Primitive parser", function() { } }); - var buffer = new Buffer([0x01, 0xd2, 0x04]); + var buffer = Buffer.from([0x01, 0xd2, 0x04]); assert.deepEqual(parser.parse(buffer), { a: 2, b: "test1234" }); }); it("should parse floating point types", function() { @@ -41,7 +41,7 @@ describe("Primitive parser", function() { .doublele("b"); var FLT_EPSILON = 0.00001; - var buffer = new Buffer([ + var buffer = Buffer.from([ 0x41, 0x45, 0x85, @@ -65,7 +65,16 @@ describe("Primitive parser", function() { .int32le("little") .int32be("big"); - var buffer = new Buffer([0x4e, 0x61, 0xbc, 0x00, 0x00, 0xbc, 0x61, 0x4e]); + var buffer = Buffer.from([ + 0x4e, + 0x61, + 0xbc, + 0x00, + 0x00, + 0xbc, + 0x61, + 0x4e + ]); assert.deepEqual(parser.parse(buffer), { little: 12345678, big: 12345678 @@ -78,7 +87,7 @@ describe("Primitive parser", function() { .uint16le("b") .uint32be("c"); - var buffer = new Buffer([ + var buffer = Buffer.from([ 0x00, 0xff, 0xff, @@ -104,14 +113,14 @@ describe("Primitive parser", function() { bytes.push(parseInt(s.slice(i, i + 8), 2)); } - return new Buffer(bytes); + return Buffer.from(bytes); }; it("binary literal helper should work", function() { - assert.deepEqual(binaryLiteral("11110000"), new Buffer([0xf0])); + assert.deepEqual(binaryLiteral("11110000"), Buffer.from([0xf0])); assert.deepEqual( binaryLiteral("11110000 10100101"), - new Buffer([0xf0, 0xa5]) + Buffer.from([0xf0, 0xa5]) ); }); @@ -223,7 +232,7 @@ describe("Primitive parser", function() { describe("String parser", function() { it("should parse ASCII encoded string", function() { var text = "hello, world"; - var buffer = new Buffer(text, "ascii"); + var buffer = Buffer.from(text, "ascii"); var parser = Parser.start().string("msg", { length: buffer.length, encoding: "ascii" @@ -233,7 +242,7 @@ describe("Primitive parser", function() { }); it("should parse UTF8 encoded string", function() { var text = "こんにちは、せかい。"; - var buffer = new Buffer(text, "utf8"); + var buffer = Buffer.from(text, "utf8"); var parser = Parser.start().string("msg", { length: buffer.length, encoding: "utf8" @@ -243,7 +252,7 @@ describe("Primitive parser", function() { }); it("should parse HEX encoded string", function() { var text = "cafebabe"; - var buffer = new Buffer(text, "hex"); + var buffer = Buffer.from(text, "hex"); var parser = Parser.start().string("msg", { length: buffer.length, encoding: "hex" @@ -252,7 +261,7 @@ describe("Primitive parser", function() { assert.equal(parser.parse(buffer).msg, text); }); it("should parse variable length string", function() { - var buffer = new Buffer("0c68656c6c6f2c20776f726c64", "hex"); + var buffer = Buffer.from("0c68656c6c6f2c20776f726c64", "hex"); var parser = Parser.start() .uint8("length") .string("msg", { length: "length", encoding: "utf8" }); @@ -260,7 +269,7 @@ describe("Primitive parser", function() { assert.equal(parser.parse(buffer).msg, "hello, world"); }); it("should parse zero terminated string", function() { - var buffer = new Buffer("68656c6c6f2c20776f726c6400", "hex"); + var buffer = Buffer.from("68656c6c6f2c20776f726c6400", "hex"); var parser = Parser.start().string("msg", { zeroTerminated: true, encoding: "ascii" @@ -269,7 +278,7 @@ describe("Primitive parser", function() { assert.deepEqual(parser.parse(buffer), { msg: "hello, world" }); }); it("should parser zero terminated fixed-length string", function() { - var buffer = new Buffer("abc\u0000defghij\u0000"); + var buffer = Buffer.from("abc\u0000defghij\u0000"); var parser = Parser.start() .string("a", { length: 5, zeroTerminated: true }) .string("b", { length: 5, zeroTerminated: true }) @@ -282,7 +291,7 @@ describe("Primitive parser", function() { }); }); it("should strip trailing null characters", function() { - var buffer = new Buffer("746573740000", "hex"); + var buffer = Buffer.from("746573740000", "hex"); var parser1 = Parser.start().string("str", { length: 7, stripNull: false @@ -296,7 +305,7 @@ describe("Primitive parser", function() { assert.equal(parser2.parse(buffer).str, "test"); }); it("should parse string greedily with zero-bytes internally", function() { - var buffer = new Buffer("abc\u0000defghij\u0000"); + var buffer = Buffer.from("abc\u0000defghij\u0000"); var parser = Parser.start().string("a", { greedy: true }); assert.deepEqual(parser.parse(buffer), { @@ -311,8 +320,8 @@ describe("Primitive parser", function() { length: "len" }); - var buf = new Buffer("deadbeefdeadbeef", "hex"); - var result = parser.parse(Buffer.concat([new Buffer([8]), buf])); + var buf = Buffer.from("deadbeefdeadbeef", "hex"); + var result = parser.parse(Buffer.concat([Buffer.from([8]), buf])); assert.deepEqual(result.raw, buf); }); @@ -323,7 +332,7 @@ describe("Primitive parser", function() { clone: true }); - var buf = new Buffer("deadbeefdeadbeef", "hex"); + var buf = Buffer.from("deadbeefdeadbeef", "hex"); var result = parser.parse(buf); assert.deepEqual(result.raw, buf); result.raw[0] = 0xff; From b1376235222073ae372d4d3b1de20f1c40a89f5a Mon Sep 17 00:00:00 2001 From: Keichi Takahashi Date: Thu, 11 Jan 2018 10:49:44 +0900 Subject: [PATCH 2/3] Use Buffer.from in the example code --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 19f26403..571744f0 100644 --- a/README.md +++ b/README.md @@ -64,7 +64,7 @@ var ipHeader = new Parser() }); // Prepare buffer to parse. -var buf = new Buffer("450002c5939900002c06ef98adc24f6c850186d1", "hex"); +var buf = Buffer.from("450002c5939900002c06ef98adc24f6c850186d1", "hex"); // Parse buffer and show result console.log(ipHeader.parse(buf)); @@ -322,7 +322,7 @@ var parser = new Parser() // / // 0 -var buffer = new Buffer([ +var buffer = Buffer.from([ 2, /* left -> */ 3, /* one -> */ 1, /* -> */ 0, @@ -372,7 +372,7 @@ parser.uint8("type").choice("data", { } }); -var buffer = new Buffer([2, /* left */ 1, 1, 0, /* right */ 0]); +var buffer = Buffer.from([2, /* left */ 1, 1, 0, /* right */ 0]); parser.parse(buffer); ``` From 59dd8ffbf95f6847b57095e99372d5e1fae5177e Mon Sep 17 00:00:00 2001 From: Keichi Takahashi Date: Thu, 11 Jan 2018 11:46:41 +0900 Subject: [PATCH 3/3] Specify supported node version in package.json --- package.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 9d6ea080..e1231593 100644 --- a/package.json +++ b/package.json @@ -34,5 +34,8 @@ "url": "http://github.com/keichi/binary-parser.git" }, "bugs": "http://github.com/keichi/binary-parser/issues", - "dependencies": {} + "dependencies": {}, + "engines": { + "node": ">=5.10.0" + } }