Skip to content

tls throws when working with JSStreams #12716

Closed
@coolaj86

Description

@coolaj86

Version: v7.7.4
Platform: Darwin
Subsystem: tls

Here's the lovely error:

Assertion failed: (uv__stream_fd(stream) >= 0), function uv_read_start, file ../deps/uv/src/unix/stream.c, line 1545.

And here's how you can too:

'use strict';

var net = require('net');
var tls = require('tls');
// just a simple wrapper around a duplex to create both halves of a socket - very very simple
// https://github.com/indutny/stream-pair/blob/master/lib/stream-pair.js
var streamPair = require('stream-pair');

var netServer = net.createServer(handleTcp);

// just some certs so that it's easy to test all this
var tlsOptions = require('localhost.daplie.me-certificates').merge({});
var tlsServer = tls.createServer(tlsOptions, handleTls);

function handleTcp(conn) {
  tlsServer.emit('connection', conn);
}

function handleTls(conn) {
  conn.on('data', function (chunk) {
    console.log(chunk.toString('utf8'));
  });
}

var writer = streamPair.create();
var reader = writer.other;

netServer.emit('connection', reader);

// generated in this way
// nc -l 3000 > /tmp/sni.bin
// https://localhost.daplie.me:3000/
// hexdump -ve '1/1 "%.2x"' /tmp/sni.bin
var sni = '16030100ce010000ca03032d4ad3b5daf224a8465309487ed334c91de34c05ca5bf1c042ef54c510aadea80000202a2ac02bc02fc02cc030cca9cca8cc14cc13c013c014009c009d002f0035000a01000081dada0000ff010001000000001800160000136c6f63616c686f73742e6461706c69652e6d650017000000230000000d00140012040308040401050308050501080606010201000500050100000000001200000010000e000c02683208687474702f312e3175500000000b00020100000a000a00084a4a001d00170018baba000100';
writer.write(Buffer.from(sni, 'hex'));

and since all of my issues go to you anyway, might as well:

cc/ @indutny

May be related to:

Metadata

Metadata

Assignees

No one assigned

    Labels

    tlsIssues and PRs related to the tls subsystem.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions