]> granicus.if.org Git - curl/commitdiff
http2: Fix client write for trailers on stream close
authorJay Satiro <raysatiro@yahoo.com>
Thu, 7 Jan 2016 03:10:49 +0000 (22:10 -0500)
committerJay Satiro <raysatiro@yahoo.com>
Thu, 7 Jan 2016 03:10:49 +0000 (22:10 -0500)
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

index eb54d89b0ed0f9d1dcba78a98d3bae0416ea5bed..ba55877a5917a7c0b07dddd4fc192bec76f6f04c 100644 (file)
@@ -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"));