From 6b0cfa8399d34e34ba68d98a837dec82c88d49c6 Mon Sep 17 00:00:00 2001 From: "Guo, Yejun" Date: Wed, 30 Dec 2020 13:11:27 +0800 Subject: dnn/queue: add error check and cleanup Signed-off-by: Guo, Yejun --- libavfilter/dnn/queue.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'libavfilter/dnn/queue.c') diff --git a/libavfilter/dnn/queue.c b/libavfilter/dnn/queue.c index aa912b6f3a..e64f567906 100644 --- a/libavfilter/dnn/queue.c +++ b/libavfilter/dnn/queue.c @@ -40,8 +40,8 @@ struct FFQueue { static inline FFQueueEntry *create_entry(void *val) { FFQueueEntry *entry = av_malloc(sizeof(*entry)); - av_assert0(entry != NULL); - entry->value = val; + if (entry) + entry->value = val; return entry; } @@ -53,6 +53,14 @@ FFQueue* ff_queue_create(void) q->head = create_entry(q); q->tail = create_entry(q); + + if (!q->head || !q->tail) { + av_freep(&q->head); + av_freep(&q->tail); + av_freep(&q); + return NULL; + } + q->head->next = q->tail; q->tail->prev = q->head; q->head->prev = NULL; @@ -99,14 +107,16 @@ void *ff_queue_peek_back(FFQueue *q) return q->tail->prev->value; } -void ff_queue_push_front(FFQueue *q, void *v) +int ff_queue_push_front(FFQueue *q, void *v) { FFQueueEntry *new_entry; FFQueueEntry *original_next; if (!q) - return; + return 0; new_entry = create_entry(v); + if (!new_entry) + return -1; original_next = q->head->next; q->head->next = new_entry; @@ -114,16 +124,20 @@ void ff_queue_push_front(FFQueue *q, void *v) new_entry->prev = q->head; new_entry->next = original_next; q->length++; + + return q->length; } -void ff_queue_push_back(FFQueue *q, void *v) +int ff_queue_push_back(FFQueue *q, void *v) { FFQueueEntry *new_entry; FFQueueEntry *original_prev; if (!q) - return; + return 0; new_entry = create_entry(v); + if (!new_entry) + return -1; original_prev = q->tail->prev; q->tail->prev = new_entry; @@ -131,6 +145,8 @@ void ff_queue_push_back(FFQueue *q, void *v) new_entry->next = q->tail; new_entry->prev = original_prev; q->length++; + + return q->length; } void *ff_queue_pop_front(FFQueue *q) -- cgit v1.2.3