Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 4a0fb6f

Browse filesBrowse files
TrottFishrock123
authored andcommitted
Revert "child_process: measure buffer length in bytes"
This reverts commit c9a5990. PR-URL: #7391 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Jackson Tian <shyvo1987@gmail.com>
1 parent 7a7b8f7 commit 4a0fb6f
Copy full SHA for 4a0fb6f

File tree

Expand file treeCollapse file tree

4 files changed

+33
-57
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

4 files changed

+33
-57
lines changed
Open diff view settings
Collapse file

‎lib/child_process.js‎

Copy file name to clipboardExpand all lines: lib/child_process.js
+30-41Lines changed: 30 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -146,13 +146,15 @@ exports.execFile = function(file /*, args, options, callback*/) {
146146
});
147147

148148
var encoding;
149-
var stdoutState;
150-
var stderrState;
151-
var _stdout = [];
152-
var _stderr = [];
149+
var _stdout;
150+
var _stderr;
153151
if (options.encoding !== 'buffer' && Buffer.isEncoding(options.encoding)) {
154152
encoding = options.encoding;
153+
_stdout = '';
154+
_stderr = '';
155155
} else {
156+
_stdout = [];
157+
_stderr = [];
156158
encoding = null;
157159
}
158160
var stdoutLen = 0;
@@ -174,23 +176,16 @@ exports.execFile = function(file /*, args, options, callback*/) {
174176

175177
if (!callback) return;
176178

177-
var stdout = Buffer.concat(_stdout, stdoutLen);
178-
var stderr = Buffer.concat(_stderr, stderrLen);
179-
180-
var stdoutEncoding = encoding;
181-
var stderrEncoding = encoding;
182-
183-
if (stdoutState && stdoutState.decoder)
184-
stdoutEncoding = stdoutState.decoder.encoding;
185-
186-
if (stderrState && stderrState.decoder)
187-
stderrEncoding = stderrState.decoder.encoding;
188-
189-
if (stdoutEncoding)
190-
stdout = stdout.toString(stdoutEncoding);
191-
192-
if (stderrEncoding)
193-
stderr = stderr.toString(stderrEncoding);
179+
// merge chunks
180+
var stdout;
181+
var stderr;
182+
if (!encoding) {
183+
stdout = Buffer.concat(_stdout);
184+
stderr = Buffer.concat(_stderr);
185+
} else {
186+
stdout = _stdout;
187+
stderr = _stderr;
188+
}
194189

195190
if (ex) {
196191
// Will be handled later
@@ -250,45 +245,39 @@ exports.execFile = function(file /*, args, options, callback*/) {
250245
}
251246

252247
if (child.stdout) {
253-
stdoutState = child.stdout._readableState;
248+
if (encoding)
249+
child.stdout.setEncoding(encoding);
254250

255251
child.stdout.addListener('data', function(chunk) {
256-
// If `child.stdout.setEncoding()` happened in userland, convert string to
257-
// Buffer.
258-
if (stdoutState.decoder) {
259-
chunk = Buffer.from(chunk, stdoutState.decoder.encoding);
260-
}
261-
262-
stdoutLen += chunk.byteLength;
252+
stdoutLen += chunk.length;
263253

264254
if (stdoutLen > options.maxBuffer) {
265255
ex = new Error('stdout maxBuffer exceeded');
266-
stdoutLen -= chunk.byteLength;
267256
kill();
268257
} else {
269-
_stdout.push(chunk);
258+
if (!encoding)
259+
_stdout.push(chunk);
260+
else
261+
_stdout += chunk;
270262
}
271263
});
272264
}
273265

274266
if (child.stderr) {
275-
stderrState = child.stderr._readableState;
267+
if (encoding)
268+
child.stderr.setEncoding(encoding);
276269

277270
child.stderr.addListener('data', function(chunk) {
278-
// If `child.stderr.setEncoding()` happened in userland, convert string to
279-
// Buffer.
280-
if (stderrState.decoder) {
281-
chunk = Buffer.from(chunk, stderrState.decoder.encoding);
282-
}
283-
284-
stderrLen += chunk.byteLength;
271+
stderrLen += chunk.length;
285272

286273
if (stderrLen > options.maxBuffer) {
287274
ex = new Error('stderr maxBuffer exceeded');
288-
stderrLen -= chunk.byteLength;
289275
kill();
290276
} else {
291-
_stderr.push(chunk);
277+
if (!encoding)
278+
_stderr.push(chunk);
279+
else
280+
_stderr += chunk;
292281
}
293282
});
294283
}
Collapse file

‎…l/test-child-process-maxBuffer-stdout.js‎ ‎…_issues/test-child-process-max-buffer.js‎test/parallel/test-child-process-maxBuffer-stdout.js renamed to test/known_issues/test-child-process-max-buffer.js test/parallel/test-child-process-maxBuffer-stdout.js renamed to test/known_issues/test-child-process-max-buffer.js

Copy file name to clipboardExpand all lines: test/known_issues/test-child-process-max-buffer.js
+2-1Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
'use strict';
2+
// Refs: https://github.com/nodejs/node/issues/1901
23
const common = require('../common');
34
const assert = require('assert');
45
const cp = require('child_process');
@@ -9,7 +10,7 @@ if (process.argv[2] === 'child') {
910
} else {
1011
const cmd = `${process.execPath} ${__filename} child`;
1112

12-
cp.exec(cmd, {maxBuffer: 10}, common.mustCall((err, stdout, stderr) => {
13+
cp.exec(cmd, { maxBuffer: 10 }, common.mustCall((err, stdout, stderr) => {
1314
assert.strictEqual(err.message, 'stdout maxBuffer exceeded');
1415
}));
1516
}
Collapse file

‎…child-process-exec-stdout-data-string.js‎ ‎…child-process-exec-stdout-data-string.js‎test/known_issues/test-child-process-exec-stdout-data-string.js renamed to test/parallel/test-child-process-exec-stdout-data-string.js test/known_issues/test-child-process-exec-stdout-data-string.js renamed to test/parallel/test-child-process-exec-stdout-data-string.js

Copy file name to clipboardExpand all lines: test/parallel/test-child-process-exec-stdout-data-string.js
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,4 @@ const command = common.isWindows ? 'dir' : 'ls';
1414
exec(command).stdout.on('data', cb);
1515

1616
exec('fhqwhgads').stderr.on('data', cb);
17+
Collapse file

‎test/parallel/test-child-process-maxBuffer-stderr.js‎

Copy file name to clipboardExpand all lines: test/parallel/test-child-process-maxBuffer-stderr.js
-15Lines changed: 0 additions & 15 deletions
This file was deleted.

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.