Skip to content

Commit

Permalink
Fix writing truncated packets starting with large string/buffer
Browse files Browse the repository at this point in the history
fixes #1438
  • Loading branch information
dougwilson committed Jun 8, 2016
1 parent 82614d6 commit 36b1927
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 7 deletions.
4 changes: 4 additions & 0 deletions Changes.md
Expand Up @@ -4,6 +4,10 @@ This file is a manually maintained list of changes for each release. Feel free
to add your changes here when sending pull requests. Also send corrections if
you spot any mistakes.

## HEAD

* Fix writing truncated packets starting with large string/buffer #1438

## v2.11.0 (2016-06-06)

* Add `POOL_CLOSED` code to "Pool is closed." error
Expand Down
2 changes: 1 addition & 1 deletion lib/protocol/PacketWriter.js
Expand Up @@ -188,7 +188,7 @@ PacketWriter.prototype.writeLengthCodedString = function(value) {

PacketWriter.prototype._allocate = function _allocate(bytes) {
if (!this._buffer) {
this._buffer = new Buffer(BUFFER_ALLOC_SIZE);
this._buffer = new Buffer(Math.max(BUFFER_ALLOC_SIZE, bytes));
this._offset = 0;
return;
}
Expand Down
1 change: 1 addition & 0 deletions test/fixtures/data.csv
Expand Up @@ -2,3 +2,4 @@
2,This is a test
3,For loading data from a file
4,中文内容
5,this is a long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long string
9 changes: 6 additions & 3 deletions test/integration/connection/test-load-data-infile.js
Expand Up @@ -14,7 +14,7 @@ common.getTestConnection(function (err, connection) {
connection.query([
'CREATE TEMPORARY TABLE ?? (',
'`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
'`title` varchar(255),',
'`title` varchar(400),',
'PRIMARY KEY (`id`)',
') ENGINE=InnoDB DEFAULT CHARSET=utf8'
].join('\n'), [table], assert.ifError);
Expand All @@ -25,16 +25,19 @@ common.getTestConnection(function (err, connection) {

connection.query(sql, [path, table, ','], function (err, result) {
assert.ifError(err);
assert.equal(result.affectedRows, 4);
assert.equal(result.affectedRows, 5);
});

connection.query('SELECT * FROM ??', [table], function (err, rows) {
assert.ifError(err);
assert.equal(rows.length, 4);
assert.equal(rows.length, 5);
assert.equal(rows[0].id, 1);
assert.equal(rows[0].title, 'Hello World');
assert.equal(rows[3].id, 4);
assert.equal(rows[3].title, '中文内容');
assert.equal(rows[4].id, 5);
assert.equal(rows[4].title.length, 321);
assert.equal(rows[4].title, 'this is a long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long string');
});

connection.query(sql, [badPath, table, ','], function (err) {
Expand Down
Expand Up @@ -13,7 +13,7 @@ common.getTestConnection({multipleStatements: true}, function (err, connection)
connection.query([
'CREATE TEMPORARY TABLE ?? (',
'`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
'`title` varchar(255),',
'`title` varchar(400),',
'PRIMARY KEY (`id`)',
') ENGINE=InnoDB DEFAULT CHARSET=utf8'
].join('\n'), [table], assert.ifError);
Expand All @@ -29,17 +29,20 @@ common.getTestConnection({multipleStatements: true}, function (err, connection)
connection.query(sql, function (err, results) {
assert.ifError(err);
assert.equal(results.length, 2);
assert.equal(results[0].affectedRows, 4);
assert.equal(results[0].affectedRows, 5);
assert.equal(results[1].affectedRows, 0);
});

connection.query('SELECT * FROM ??', [table], function (err, rows) {
assert.ifError(err);
assert.equal(rows.length, 4);
assert.equal(rows.length, 5);
assert.equal(rows[0].id, 1);
assert.equal(rows[0].title, 'Hello World');
assert.equal(rows[3].id, 4);
assert.equal(rows[3].title, '中文内容');
assert.equal(rows[4].id, 5);
assert.equal(rows[4].title.length, 321);
assert.equal(rows[4].title, 'this is a long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long string');
});

connection.end(assert.ifError);
Expand Down

0 comments on commit 36b1927

Please sign in to comment.