nghttp2_hd: Don't malloc if namelen/valuelen are zero
This commit is contained in:
parent
0000d3e7f9
commit
321136b042
|
@ -118,19 +118,28 @@ int nghttp2_hd_entry_init(nghttp2_hd_entry *ent, uint8_t index, uint8_t flags,
|
||||||
{
|
{
|
||||||
int rv = 0;
|
int rv = 0;
|
||||||
if(flags & NGHTTP2_HD_FLAG_NAME_ALLOC) {
|
if(flags & NGHTTP2_HD_FLAG_NAME_ALLOC) {
|
||||||
ent->nv.name = nghttp2_memdup(name, namelen);
|
if(namelen == 0) {
|
||||||
if(ent->nv.name == NULL) {
|
/* We should not allow empty header field name */
|
||||||
rv = NGHTTP2_ERR_NOMEM;
|
ent->nv.name = NULL;
|
||||||
goto fail;
|
} else {
|
||||||
|
ent->nv.name = nghttp2_memdup(name, namelen);
|
||||||
|
if(ent->nv.name == NULL) {
|
||||||
|
rv = NGHTTP2_ERR_NOMEM;
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ent->nv.name = name;
|
ent->nv.name = name;
|
||||||
}
|
}
|
||||||
if(flags & NGHTTP2_HD_FLAG_VALUE_ALLOC) {
|
if(flags & NGHTTP2_HD_FLAG_VALUE_ALLOC) {
|
||||||
ent->nv.value = nghttp2_memdup(value, valuelen);
|
if(valuelen == 0) {
|
||||||
if(ent->nv.value == NULL) {
|
ent->nv.value = NULL;
|
||||||
rv = NGHTTP2_ERR_NOMEM;
|
} else {
|
||||||
goto fail2;
|
ent->nv.value = nghttp2_memdup(value, valuelen);
|
||||||
|
if(ent->nv.value == NULL) {
|
||||||
|
rv = NGHTTP2_ERR_NOMEM;
|
||||||
|
goto fail2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ent->nv.value = value;
|
ent->nv.value = value;
|
||||||
|
|
|
@ -57,6 +57,8 @@ void test_nghttp2_hd_deflate(void)
|
||||||
nghttp2_nv nva4[] = {MAKE_NV(":path", "/style.css"),
|
nghttp2_nv nva4[] = {MAKE_NV(":path", "/style.css"),
|
||||||
MAKE_NV("cookie", "k1=v1"),
|
MAKE_NV("cookie", "k1=v1"),
|
||||||
MAKE_NV("cookie", "k1=v1")};
|
MAKE_NV("cookie", "k1=v1")};
|
||||||
|
nghttp2_nv nva5[] = {MAKE_NV(":path", "/style.css"),
|
||||||
|
MAKE_NV("x-nghttp2", "")};
|
||||||
size_t nv_offset = 12;
|
size_t nv_offset = 12;
|
||||||
uint8_t *buf = NULL;
|
uint8_t *buf = NULL;
|
||||||
size_t buflen = 0;
|
size_t buflen = 0;
|
||||||
|
@ -125,6 +127,21 @@ void test_nghttp2_hd_deflate(void)
|
||||||
nghttp2_nv_array_del(resnva);
|
nghttp2_nv_array_del(resnva);
|
||||||
nghttp2_hd_end_headers(&inflater);
|
nghttp2_hd_end_headers(&inflater);
|
||||||
|
|
||||||
|
/* Fifth headers includes empty value */
|
||||||
|
blocklen = nghttp2_hd_deflate_hd(&deflater, &buf, &buflen, nv_offset, nva5,
|
||||||
|
sizeof(nva5)/sizeof(nghttp2_nv));
|
||||||
|
CU_ASSERT(blocklen > 0);
|
||||||
|
nghttp2_hd_end_headers(&deflater);
|
||||||
|
|
||||||
|
CU_ASSERT(2 == nghttp2_hd_inflate_hd(&inflater, &resnva, buf + nv_offset,
|
||||||
|
blocklen));
|
||||||
|
|
||||||
|
assert_nv_equal(nva5, resnva, 2);
|
||||||
|
|
||||||
|
nghttp2_nv_array_del(resnva);
|
||||||
|
nghttp2_hd_end_headers(&inflater);
|
||||||
|
|
||||||
|
/* Cleanup */
|
||||||
free(buf);
|
free(buf);
|
||||||
nghttp2_hd_inflate_free(&inflater);
|
nghttp2_hd_inflate_free(&inflater);
|
||||||
nghttp2_hd_deflate_free(&deflater);
|
nghttp2_hd_deflate_free(&deflater);
|
||||||
|
|
Loading…
Reference in New Issue