fftools/cmdutils: Atomically add elements to list of pointers, fix crash

Currently, adding a (separately allocated) element to a list of pointers
works by first reallocating the array of pointers and (on success)
incrementing its size and only then allocating the new element.
If the latter allocation fails, the size is inconsistent, i.e.
array[nb_array_elems - 1] is NULL. Our cleanup code crashes in such
scenarios.

Fix this by adding an auxiliary function that atomically allocates
and adds a new element to a list of pointers.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt
2021-12-03 13:12:39 +01:00
parent 3a9861e22c
commit 3ca1e31e63
4 changed files with 43 additions and 29 deletions

View File

@@ -2214,6 +2214,22 @@ void *grow_array(void *array, int elem_size, int *size, int new_size)
return array;
}
void *allocate_array_elem(void *ptr, size_t elem_size, int *nb_elems)
{
void *new_elem, **array = (void**)ptr;
if (*nb_elems == INT_MAX) {
av_log(NULL, AV_LOG_ERROR, "Array too big.\n");
exit_program(1);
}
new_elem = av_mallocz(elem_size);
if (!new_elem)
exit_program(1);
GROW_ARRAY(array, *nb_elems);
array[*nb_elems - 1] = new_elem;
return array;
}
double get_rotation(int32_t *displaymatrix)
{
double theta = 0;