mirror of https://github.com/lukechilds/node.git
Browse Source
This change fixes a known issue where `maxBuffer` limits by characters rather than bytes. Benchmark added to confirm no performance regression occurs with this change. PR-URL: https://github.com/nodejs/node/pull/6764 Fixes: https://github.com/nodejs/node/issues/1901 Reviewed-By: Brian White <mscdex@mscdex.net>v6.x
Rich Trott
9 years ago
committed by
Rod Vagg
5 changed files with 96 additions and 41 deletions
@ -0,0 +1,30 @@ |
|||||
|
'use strict'; |
||||
|
const common = require('../common.js'); |
||||
|
const bench = common.createBenchmark(main, { |
||||
|
len: [64, 256, 1024, 4096, 32768], |
||||
|
dur: [5] |
||||
|
}); |
||||
|
|
||||
|
const exec = require('child_process').exec; |
||||
|
function main(conf) { |
||||
|
bench.start(); |
||||
|
|
||||
|
const dur = +conf.dur; |
||||
|
const len = +conf.len; |
||||
|
|
||||
|
const msg = `"${'.'.repeat(len)}"`; |
||||
|
msg.match(/./); |
||||
|
const options = {'stdio': ['ignore', 'pipe', 'ignore']}; |
||||
|
// NOTE: Command below assumes bash shell.
|
||||
|
const child = exec(`while\n echo ${msg}\ndo :; done\n`, options); |
||||
|
|
||||
|
var bytes = 0; |
||||
|
child.stdout.on('data', function(msg) { |
||||
|
bytes += msg.length; |
||||
|
}); |
||||
|
|
||||
|
setTimeout(function() { |
||||
|
child.kill(); |
||||
|
bench.end(bytes); |
||||
|
}, dur * 1000); |
||||
|
} |
@ -0,0 +1,15 @@ |
|||||
|
'use strict'; |
||||
|
const common = require('../common'); |
||||
|
const assert = require('assert'); |
||||
|
const cp = require('child_process'); |
||||
|
const unicode = '中文测试'; // Length = 4, Byte length = 13
|
||||
|
|
||||
|
if (process.argv[2] === 'child') { |
||||
|
console.error(unicode); |
||||
|
} else { |
||||
|
const cmd = `${process.execPath} ${__filename} child`; |
||||
|
|
||||
|
cp.exec(cmd, {maxBuffer: 10}, common.mustCall((err, stdout, stderr) => { |
||||
|
assert.strictEqual(err.message, 'stderr maxBuffer exceeded'); |
||||
|
})); |
||||
|
} |
Loading…
Reference in new issue