Skip to content

Commit 36b1927

Browse files
committed
Fix writing truncated packets starting with large string/buffer
fixes #1438
1 parent 82614d6 commit 36b1927

File tree

5 files changed

+18
-7
lines changed

5 files changed

+18
-7
lines changed

Changes.md

+4
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@ This file is a manually maintained list of changes for each release. Feel free
44
to add your changes here when sending pull requests. Also send corrections if
55
you spot any mistakes.
66

7+
## HEAD
8+
9+
* Fix writing truncated packets starting with large string/buffer #1438
10+
711
## v2.11.0 (2016-06-06)
812

913
* Add `POOL_CLOSED` code to "Pool is closed." error

lib/protocol/PacketWriter.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ PacketWriter.prototype.writeLengthCodedString = function(value) {
188188

189189
PacketWriter.prototype._allocate = function _allocate(bytes) {
190190
if (!this._buffer) {
191-
this._buffer = new Buffer(BUFFER_ALLOC_SIZE);
191+
this._buffer = new Buffer(Math.max(BUFFER_ALLOC_SIZE, bytes));
192192
this._offset = 0;
193193
return;
194194
}

test/fixtures/data.csv

+1
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
2,This is a test
33
3,For loading data from a file
44
4,中文内容
5+
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

test/integration/connection/test-load-data-infile.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ common.getTestConnection(function (err, connection) {
1414
connection.query([
1515
'CREATE TEMPORARY TABLE ?? (',
1616
'`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
17-
'`title` varchar(255),',
17+
'`title` varchar(400),',
1818
'PRIMARY KEY (`id`)',
1919
') ENGINE=InnoDB DEFAULT CHARSET=utf8'
2020
].join('\n'), [table], assert.ifError);
@@ -25,16 +25,19 @@ common.getTestConnection(function (err, connection) {
2525

2626
connection.query(sql, [path, table, ','], function (err, result) {
2727
assert.ifError(err);
28-
assert.equal(result.affectedRows, 4);
28+
assert.equal(result.affectedRows, 5);
2929
});
3030

3131
connection.query('SELECT * FROM ??', [table], function (err, rows) {
3232
assert.ifError(err);
33-
assert.equal(rows.length, 4);
33+
assert.equal(rows.length, 5);
3434
assert.equal(rows[0].id, 1);
3535
assert.equal(rows[0].title, 'Hello World');
3636
assert.equal(rows[3].id, 4);
3737
assert.equal(rows[3].title, '中文内容');
38+
assert.equal(rows[4].id, 5);
39+
assert.equal(rows[4].title.length, 321);
40+
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');
3841
});
3942

4043
connection.query(sql, [badPath, table, ','], function (err) {

test/integration/connection/test-multiple-statements-load-data-infile.js

+6-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ common.getTestConnection({multipleStatements: true}, function (err, connection)
1313
connection.query([
1414
'CREATE TEMPORARY TABLE ?? (',
1515
'`id` int(11) unsigned NOT NULL AUTO_INCREMENT,',
16-
'`title` varchar(255),',
16+
'`title` varchar(400),',
1717
'PRIMARY KEY (`id`)',
1818
') ENGINE=InnoDB DEFAULT CHARSET=utf8'
1919
].join('\n'), [table], assert.ifError);
@@ -29,17 +29,20 @@ common.getTestConnection({multipleStatements: true}, function (err, connection)
2929
connection.query(sql, function (err, results) {
3030
assert.ifError(err);
3131
assert.equal(results.length, 2);
32-
assert.equal(results[0].affectedRows, 4);
32+
assert.equal(results[0].affectedRows, 5);
3333
assert.equal(results[1].affectedRows, 0);
3434
});
3535

3636
connection.query('SELECT * FROM ??', [table], function (err, rows) {
3737
assert.ifError(err);
38-
assert.equal(rows.length, 4);
38+
assert.equal(rows.length, 5);
3939
assert.equal(rows[0].id, 1);
4040
assert.equal(rows[0].title, 'Hello World');
4141
assert.equal(rows[3].id, 4);
4242
assert.equal(rows[3].title, '中文内容');
43+
assert.equal(rows[4].id, 5);
44+
assert.equal(rows[4].title.length, 321);
45+
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');
4346
});
4447

4548
connection.end(assert.ifError);

0 commit comments

Comments
 (0)