Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Next Next commit
net: fix crash if POLLHUP is received
If the `onread` socket option is used and a `POLLHUP` event is received,
libuv returns `UV_EOF` along with a `NULL` buffer in the read callback,
causing the crash. Deal with this case.

Fixes: #31823
  • Loading branch information
santigimeno committed Mar 31, 2020
commit 00e04bc2a93956553844766ecff7eab39beb843f
10 changes: 9 additions & 1 deletion src/stream_base.cc
Original file line number Diff line number Diff line change
Expand Up @@ -517,13 +517,21 @@ uv_buf_t CustomBufferJSListener::OnStreamAlloc(size_t suggested_size) {

void CustomBufferJSListener::OnStreamRead(ssize_t nread, const uv_buf_t& buf) {
CHECK_NOT_NULL(stream_);
CHECK_EQ(buf.base, buffer_.base);

StreamBase* stream = static_cast<StreamBase*>(stream_);
Environment* env = stream->stream_env();
HandleScope handle_scope(env->isolate());
Context::Scope context_scope(env->context());

// To deal with the case where POLLHUP is received and UV_EOF is returned, as
// libuv returns an empty buffer. (On unices only)
Comment thread
addaleax marked this conversation as resolved.
Outdated
if (nread == UV_EOF && buf.base == nullptr) {
stream->CallJSOnreadMethod(nread, Local<ArrayBuffer>());
return;
}

CHECK_EQ(buf.base, buffer_.base);

MaybeLocal<Value> ret = stream->CallJSOnreadMethod(nread,
Local<ArrayBuffer>(),
0,
Expand Down