http/range: fix memory leak on out of order ranges

pull/6409/head
Victor Julien 5 years ago committed by Philippe Antoine
parent e82416a415
commit fc5632664c

@ -409,9 +409,8 @@ File *ContainerUrlRangeClose(HttpRangeContainerBlock *c, uint16_t flags)
File *f = c->container->files->tail; File *f = c->container->files->tail;
// have we reached a saved range ? // have we reached a saved range ?
HttpRangeContainerBuffer *range; HttpRangeContainerBuffer *range, *safe = NULL;
RB_FOREACH(range, HTTP_RANGES, &c->container->fragment_tree) RB_FOREACH_SAFE (range, HTTP_RANGES, &c->container->fragment_tree, safe) {
{
if (f->size < range->start) { if (f->size < range->start) {
break; break;
} }
@ -437,7 +436,10 @@ File *ContainerUrlRangeClose(HttpRangeContainerBlock *c, uint16_t flags)
} }
} }
// anyways, remove this range from the linked list, as we are now beyond it // anyways, remove this range from the linked list, as we are now beyond it
RB_REMOVE(HTTP_RANGES, &c->container->fragment_tree, range); HTTP_RANGES_RB_REMOVE(&c->container->fragment_tree, range);
(void)SC_ATOMIC_SUB(ContainerUrlRangeList.ht->memuse, range->buflen);
SCFree(range->buffer);
SCFree(range);
} }
if (f->size >= c->container->totalsize) { if (f->size >= c->container->totalsize) {

Loading…
Cancel
Save