nghttp2_hd: Don't malloc if name/value is in first chunk without indexing
This commit is contained in:
parent
e20b417b84
commit
7e6019aef1
|
@ -1351,6 +1351,10 @@ static int hd_inflate_remove_bufs(nghttp2_hd_inflater *inflater,
|
||||||
ssize_t rv;
|
ssize_t rv;
|
||||||
size_t buflen;
|
size_t buflen;
|
||||||
uint8_t *buf;
|
uint8_t *buf;
|
||||||
|
nghttp2_buf *pbuf;
|
||||||
|
|
||||||
|
if(inflater->index_required ||
|
||||||
|
inflater->nvbufs.head != inflater->nvbufs.cur) {
|
||||||
|
|
||||||
rv = nghttp2_bufs_remove(&inflater->nvbufs, &buf);
|
rv = nghttp2_bufs_remove(&inflater->nvbufs, &buf);
|
||||||
|
|
||||||
|
@ -1374,6 +1378,29 @@ static int hd_inflate_remove_bufs(nghttp2_hd_inflater *inflater,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If we are not going to store header in header table and
|
||||||
|
name/value are in first chunk, we just refer them from nv,
|
||||||
|
instead of mallocing another memory. */
|
||||||
|
|
||||||
|
pbuf = &inflater->nvbufs.head->buf;
|
||||||
|
|
||||||
|
if(value_only) {
|
||||||
|
nv->name = NULL;
|
||||||
|
nv->namelen = 0;
|
||||||
|
} else {
|
||||||
|
nv->name = pbuf->pos;
|
||||||
|
nv->namelen = inflater->newnamelen;
|
||||||
|
}
|
||||||
|
|
||||||
|
nv->value = pbuf->pos + nv->namelen;
|
||||||
|
nv->valuelen = nghttp2_buf_len(pbuf) - nv->namelen;
|
||||||
|
|
||||||
|
/* Resetting does not change the content of first buffer */
|
||||||
|
nghttp2_bufs_reset(&inflater->nvbufs);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Finalize literal header representation - new name- reception. If
|
* Finalize literal header representation - new name- reception. If
|
||||||
* header is emitted, |*nv_out| is filled with that value and 0 is
|
* header is emitted, |*nv_out| is filled with that value and 0 is
|
||||||
|
@ -1430,7 +1457,9 @@ static int hd_inflate_commit_newname(nghttp2_hd_inflater *inflater,
|
||||||
|
|
||||||
emit_literal_header(nv_out, &nv);
|
emit_literal_header(nv_out, &nv);
|
||||||
|
|
||||||
|
if(nv.name != inflater->nvbufs.head->buf.pos) {
|
||||||
inflater->nv_keep = nv.name;
|
inflater->nv_keep = nv.name;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1509,7 +1538,9 @@ static int hd_inflate_commit_indname(nghttp2_hd_inflater *inflater,
|
||||||
|
|
||||||
emit_literal_header(nv_out, &nv);
|
emit_literal_header(nv_out, &nv);
|
||||||
|
|
||||||
|
if(nv.value != inflater->nvbufs.head->buf.pos) {
|
||||||
inflater->nv_keep = nv.value;
|
inflater->nv_keep = nv.value;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue