Skip to content
Snippets Groups Projects
Commit 68d17643 authored by Daniel Stenberg's avatar Daniel Stenberg
Browse files

http2: add stream != NULL checks for reliability

They should not trigger, but in case of internal problems we at least
avoid crashes this way.
parent aab76af1
No related branches found
No related tags found
No related merge requests found
......@@ -316,6 +316,11 @@ static int push_promise(struct SessionHandle *data,
DEBUGF(infof(data, "Got PUSH_PROMISE, ask application!\n"));
stream = data->req.protop;
if(!stream) {
failf(data, "Internal NULL stream!\n");
rv = 1;
goto fail;
}
rv = data->multi->push_cb(data, newhandle,
stream->push_headers_used, &heads,
......@@ -391,6 +396,10 @@ static int on_frame_recv(nghttp2_session *session, const nghttp2_frame *frame,
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
stream = data_s->req.protop;
if(!stream) {
failf(conn->data, "Internal NULL stream! 2\n");
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
}
else
/* we do nothing on stream zero */
......@@ -529,6 +538,10 @@ static int on_data_chunk_recv(nghttp2_session *session, uint8_t flags,
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
stream = data_s->req.protop;
if(!stream) {
failf(conn->data, "Internal NULL stream! 3\n");
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
nread = MIN(stream->len, len);
memcpy(&stream->mem[stream->memlen], data, nread);
......@@ -617,6 +630,10 @@ static int on_stream_close(nghttp2_session *session, int32_t stream_id,
return 0;
}
stream = data_s->req.protop;
if(!stream) {
failf(conn->data, "Internal NULL stream! 4\n");
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
stream->error_code = error_code;
stream->closed = TRUE;
......@@ -695,6 +712,10 @@ static int on_header(nghttp2_session *session, const nghttp2_frame *frame,
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
stream = data_s->req.protop;
if(!stream) {
failf(conn->data, "Internal NULL stream! 5\n");
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
if(stream->bodystarted)
/* Ignore trailer or HEADERS not mapped to HTTP semantics. The
......@@ -793,6 +814,10 @@ static ssize_t data_source_read_callback(nghttp2_session *session,
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
stream = data_s->req.protop;
if(!stream) {
failf(conn->data, "Internal NULL stream! 6\n");
return NGHTTP2_ERR_CALLBACK_FAILURE;
}
}
else {
failf(conn->data, "nghttp2 confusion");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment