diff --git a/libavcodec/utils.c b/libavcodec/utils.c index 0910fca7e2..b086665478 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -124,13 +124,16 @@ static void *avformat_mutex; static inline int ff_fast_malloc(void *ptr, unsigned int *size, size_t min_size, int zero_realloc) { - void **p = ptr; - if (min_size <= *size && *p) + void *val; + + memcpy(&val, ptr, sizeof(val)); + if (min_size <= *size && val) return 0; min_size = FFMAX(min_size + min_size / 16 + 32, min_size); - av_free(*p); - *p = zero_realloc ? av_mallocz(min_size) : av_malloc(min_size); - if (!*p) + av_freep(ptr); + val = zero_realloc ? av_mallocz(min_size) : av_malloc(min_size); + memcpy(ptr, &val, sizeof(val)); + if (!val) min_size = 0; *size = min_size; return 1;