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
This commit is contained in:
parent
3de2d48d4c
commit
973ee6bdd3
26
lib/http2.c
26
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"));
|
||||
|
Loading…
x
Reference in New Issue
Block a user