mirror of
https://github.com/libevent/libevent.git
synced 2025-01-31 09:12:55 +08:00
buffer: Merge branch '340-dig-v2'
All details in this two patches (it's titles), and shortlog is below. * 340-dig-v2: buffer: fix overflow check in evbuffer_expand_singlechain() test/buffer: cover evbuffer_expand() for overflow
This commit is contained in:
commit
70040c0989
3
buffer.c
3
buffer.c
@ -1982,8 +1982,7 @@ evbuffer_expand_singlechain(struct evbuffer *buf, size_t datlen)
|
|||||||
/* Would expanding this chunk be affordable and worthwhile? */
|
/* Would expanding this chunk be affordable and worthwhile? */
|
||||||
if (CHAIN_SPACE_LEN(chain) < chain->buffer_len / 8 ||
|
if (CHAIN_SPACE_LEN(chain) < chain->buffer_len / 8 ||
|
||||||
chain->off > MAX_TO_COPY_IN_EXPAND ||
|
chain->off > MAX_TO_COPY_IN_EXPAND ||
|
||||||
(datlen < EVBUFFER_CHAIN_MAX &&
|
datlen >= (EVBUFFER_CHAIN_MAX - chain->off)) {
|
||||||
EVBUFFER_CHAIN_MAX - datlen >= chain->off)) {
|
|
||||||
/* It's not worth resizing this chain. Can the next one be
|
/* It's not worth resizing this chain. Can the next one be
|
||||||
* used? */
|
* used? */
|
||||||
if (chain->next && CHAIN_SPACE_LEN(chain->next) >= datlen) {
|
if (chain->next && CHAIN_SPACE_LEN(chain->next) >= datlen) {
|
||||||
|
@ -708,6 +708,23 @@ end:
|
|||||||
evbuffer_free(buf);
|
evbuffer_free(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
test_evbuffer_expand_overflow(void *ptr)
|
||||||
|
{
|
||||||
|
struct evbuffer *buf;
|
||||||
|
|
||||||
|
buf = evbuffer_new();
|
||||||
|
evbuffer_add(buf, "1", 1);
|
||||||
|
evbuffer_expand(buf, EVBUFFER_CHAIN_MAX);
|
||||||
|
evbuffer_validate(buf);
|
||||||
|
|
||||||
|
evbuffer_expand(buf, EV_SIZE_MAX);
|
||||||
|
evbuffer_validate(buf);
|
||||||
|
|
||||||
|
end:
|
||||||
|
evbuffer_free(buf);
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
test_evbuffer_add1(void *ptr)
|
test_evbuffer_add1(void *ptr)
|
||||||
{
|
{
|
||||||
@ -2494,6 +2511,7 @@ struct testcase_t evbuffer_testcases[] = {
|
|||||||
{ "reserve_many2", test_evbuffer_reserve_many, 0, &nil_setup, (void*)"add" },
|
{ "reserve_many2", test_evbuffer_reserve_many, 0, &nil_setup, (void*)"add" },
|
||||||
{ "reserve_many3", test_evbuffer_reserve_many, 0, &nil_setup, (void*)"fill" },
|
{ "reserve_many3", test_evbuffer_reserve_many, 0, &nil_setup, (void*)"fill" },
|
||||||
{ "expand", test_evbuffer_expand, 0, NULL, NULL },
|
{ "expand", test_evbuffer_expand, 0, NULL, NULL },
|
||||||
|
{ "expand_overflow", test_evbuffer_expand_overflow, 0, NULL, NULL },
|
||||||
{ "add1", test_evbuffer_add1, 0, NULL, NULL },
|
{ "add1", test_evbuffer_add1, 0, NULL, NULL },
|
||||||
{ "add2", test_evbuffer_add2, 0, NULL, NULL },
|
{ "add2", test_evbuffer_add2, 0, NULL, NULL },
|
||||||
{ "reference", test_evbuffer_reference, 0, NULL, NULL },
|
{ "reference", test_evbuffer_reference, 0, NULL, NULL },
|
||||||
|
Loading…
x
Reference in New Issue
Block a user