mirror of
https://github.com/nodejs/node.git
synced 2025-05-02 17:01:08 +00:00

When a writev is caused on a socket (sometimes through corking and uncorking), previously net would call Buffer.byteLength on the array of buffers and chunks. This throws a TypeError, because Buffer.byteLength throws when passed a non-string. Indbfe8c4e
, behavior changed to throw when passed a non-string. This is correct behavior. Previously, it would cast the argument to a string, so before this commit, bytesWritten would give an erroneous value. This commit corrects the behavior equally both before and afterdbfe8c4e
. This commit fixes this bug by iterating over each chunk in the pending stack and calculating the length individually. Also adds a regression test. This additionally changes an `instanceof Buffer` check to `typeof !== 'string'`, which should be equivalent. PR-URL: https://github.com/nodejs/node/pull/14236 Reviewed-By: Brian White <mscdex@mscdex.net> Reviewed-By: Luigi Pinca <luigipinca@gmail.com> Reviewed-By: Tobias Nießen <tniessen@tnie.de> Refs: https://github.com/nodejs/node/pull/2960
36 lines
855 B
JavaScript
36 lines
855 B
JavaScript
'use strict';
|
|
|
|
const common = require('../common');
|
|
const assert = require('assert');
|
|
const net = require('net');
|
|
|
|
const server = net.createServer(function(socket) {
|
|
socket.end();
|
|
});
|
|
|
|
server.listen(0, common.mustCall(function() {
|
|
const socket = net.connect(server.address().port);
|
|
|
|
// Cork the socket, then write twice; this should cause a writev, which
|
|
// previously caused an err in the bytesWritten count.
|
|
socket.cork();
|
|
|
|
socket.write('one');
|
|
socket.write(new Buffer('twø', 'utf8'));
|
|
|
|
socket.uncork();
|
|
|
|
// one = 3 bytes, twø = 4 bytes
|
|
assert.strictEqual(socket.bytesWritten, 3 + 4);
|
|
|
|
socket.on('connect', common.mustCall(function() {
|
|
assert.strictEqual(socket.bytesWritten, 3 + 4);
|
|
}));
|
|
|
|
socket.on('end', common.mustCall(function() {
|
|
assert.strictEqual(socket.bytesWritten, 3 + 4);
|
|
|
|
server.close();
|
|
}));
|
|
}));
|