From 973ee6bdd3d444b94d431c3c31f5848d3f06ed75 Mon Sep 17 00:00:00 2001 From: Jay Satiro Date: Wed, 6 Jan 2016 22:10:49 -0500 Subject: http2: Fix client write for trailers on stream close Check that the trailer buffer exists before attempting a client write for trailers on stream close. Refer to comments in https://github.com/bagder/curl/pull/564 --- lib/http2.c | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/lib/http2.c b/lib/http2.c index eb54d89b0..ba55877a5 100644 --- a/lib/http2.c +++ b/lib/http2.c @@ -1043,21 +1043,23 @@ static ssize_t http2_handle_stream_close(struct connectdata *conn, return -1; } - trailer_pos = stream->trailer_recvbuf->buffer; - trailer_end = trailer_pos + stream->trailer_recvbuf->size_used; + if(stream->trailer_recvbuf && stream->trailer_recvbuf->buffer) { + trailer_pos = stream->trailer_recvbuf->buffer; + trailer_end = trailer_pos + stream->trailer_recvbuf->size_used; - for(; trailer_pos < trailer_end;) { - uint32_t n; - memcpy(&n, trailer_pos, sizeof(n)); - trailer_pos += sizeof(n); + for(; trailer_pos < trailer_end;) { + uint32_t n; + memcpy(&n, trailer_pos, sizeof(n)); + trailer_pos += sizeof(n); - result = Curl_client_write(conn, CLIENTWRITE_HEADER, trailer_pos, n); - if(result) { - *err = result; - return -1; - } + result = Curl_client_write(conn, CLIENTWRITE_HEADER, trailer_pos, n); + if(result) { + *err = result; + return -1; + } - trailer_pos += n + 1; + trailer_pos += n + 1; + } } DEBUGF(infof(data, "http2_recv returns 0, http2_handle_stream_close\n")); -- cgit v1.2.3