Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/FFmpeg/FFmpeg.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Eugen Hoyos <ceffmpeg@gmail.com>2020-04-12 01:36:30 +0300
committerCarl Eugen Hoyos <ceffmpeg@gmail.com>2020-04-12 23:32:03 +0300
commitb7d9507bb8c4d1b8bf99158d6859a5b2ecd73298 (patch)
treef8d27155402848756df83d671f8ccee641e73e75 /libavutil/mem.c
parent64f4d58c5e3df3cb28f1079a03f3e6a4715e73fc (diff)
lavu/mem: Make other alloc functions more similar to av_malloc().
Do not limit the array allocation functions and av_calloc() to allocations of INT_MAX, instead depend on max_alloc_size like av_malloc(). Allows a workaround for ticket #7140.
Diffstat (limited to 'libavutil/mem.c')
-rw-r--r--libavutil/mem.c20
1 files changed, 12 insertions, 8 deletions
diff --git a/libavutil/mem.c b/libavutil/mem.c
index 88fe09b179..a29c224264 100644
--- a/libavutil/mem.c
+++ b/libavutil/mem.c
@@ -183,23 +183,26 @@ int av_reallocp(void *ptr, size_t size)
void *av_malloc_array(size_t nmemb, size_t size)
{
- if (!size || nmemb >= INT_MAX / size)
+ size_t result;
+ if (av_size_mult(nmemb, size, &result) < 0)
return NULL;
- return av_malloc(nmemb * size);
+ return av_malloc(result);
}
void *av_mallocz_array(size_t nmemb, size_t size)
{
- if (!size || nmemb >= INT_MAX / size)
+ size_t result;
+ if (av_size_mult(nmemb, size, &result) < 0)
return NULL;
- return av_mallocz(nmemb * size);
+ return av_mallocz(result);
}
void *av_realloc_array(void *ptr, size_t nmemb, size_t size)
{
- if (!size || nmemb >= INT_MAX / size)
+ size_t result;
+ if (av_size_mult(nmemb, size, &result) < 0)
return NULL;
- return av_realloc(ptr, nmemb * size);
+ return av_realloc(ptr, result);
}
int av_reallocp_array(void *ptr, size_t nmemb, size_t size)
@@ -243,9 +246,10 @@ void *av_mallocz(size_t size)
void *av_calloc(size_t nmemb, size_t size)
{
- if (size <= 0 || nmemb >= INT_MAX / size)
+ size_t result;
+ if (av_size_mult(nmemb, size, &result) < 0)
return NULL;
- return av_mallocz(nmemb * size);
+ return av_mallocz(result);
}
char *av_strdup(const char *s)