const util = require('util');
const Socket = require('net').Socket;
const JSStream = process.binding('js_stream').JSStream;
+const Buffer = require('buffer').Buffer;
const uv = process.binding('uv');
const debug = util.debuglog('stream_wrap');
};
this.stream.pause();
- this.stream.on('error', function(err) {
+ this.stream.on('error', function onerror(err) {
self.emit('error', err);
});
- this.stream.on('data', function(chunk) {
+ this.stream.on('data', function ondata(chunk) {
+ if (!(chunk instanceof Buffer)) {
+ // Make sure that no further `data` events will happen
+ this.pause();
+ this.removeListener('data', ondata);
+
+ self.emit('error', new Error('Stream has StringDecoder'));
+ return;
+ }
+
debug('data', chunk.length);
if (self._handle)
self._handle.readBuffer(chunk);
});
- this.stream.once('end', function() {
+ this.stream.once('end', function onend() {
debug('end');
if (self._handle)
self._handle.emitEOF();
--- /dev/null
+'use strict';
+const common = require('../common');
+const assert = require('assert');
+
+const StreamWrap = require('_stream_wrap');
+const Duplex = require('stream').Duplex;
+
+const stream = new Duplex({
+ read: function() {
+ },
+ write: function() {
+ }
+});
+
+stream.setEncoding('ascii');
+
+const wrap = new StreamWrap(stream);
+
+wrap.on('error', common.mustCall(function(err) {
+ assert(/StringDecoder/.test(err.message));
+}));
+
+stream.push('ohai');