Commit 2b98cb57 authored by Anders Bakken's avatar Anders Bakken Committed by Daniel Stenberg
Browse files

http2: Don't pass unitialized name+len pairs to nghttp2_submit_request

bug introduced by 18691642.

Closes #493
parent 3fde8a49
Loading
Loading
Loading
Loading
+30 −23
Original line number Diff line number Diff line
@@ -1290,14 +1290,19 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,

  authority_idx = 0;

  for(i = 3; i < nheader; ++i) {
  i = 3;
  while(i < nheader) {
    size_t hlen;
    int skip = 0;
    end = strchr(hdbuf, ':');
    if(!end)
      goto fail;
    hlen = end - hdbuf;
    if(hlen == 10 && Curl_raw_nequal("connection", hdbuf, 10))
      ; /* skip Connection: headers! */
    if(hlen == 10 && Curl_raw_nequal("connection", hdbuf, 10)) {
      /* skip Connection: headers! */
      skip = 1;
      --nheader;
    }
    else if(hlen == 4 && Curl_raw_nequal("host", hdbuf, 4)) {
      authority_idx = i;
      nva[i].name = (unsigned char *)":authority";
@@ -1312,11 +1317,10 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
    end = strchr(hdbuf, 0x0d);
    if(!end)
      goto fail;
    if(!skip) {
      nva[i].value = (unsigned char *)hdbuf;
      nva[i].valuelen = (uint16_t)(end - hdbuf);
      nva[i].flags = NGHTTP2_NV_FLAG_NONE;

    hdbuf = end + 2;
      /* Inspect Content-Length header field and retrieve the request
         entity length so that we can set END_STREAM to the last DATA
         frame. */
@@ -1333,6 +1337,9 @@ static ssize_t http2_send(struct connectdata *conn, int sockindex,
                     CURL_FORMAT_CURL_OFF_T
                     "\n", stream->upload_left));
      }
      ++i;
    }
    hdbuf = end + 2;
  }

  /* :authority must come before non-pseudo header fields */