Commit b2600509 authored by Nicolas George's avatar Nicolas George Committed by Michael Niedermayer

Introduce av_size_mult.

av_size_mult helps checking for overflow when computing the size of a memory
area.
Signed-off-by: 's avatarNicolas George <nicolas.george@normalesup.org>
Signed-off-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parent e89f5881
......@@ -27,6 +27,7 @@
#define AVUTIL_MEM_H
#include "attributes.h"
#include "error.h"
#include "avutil.h"
#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C)
......@@ -144,4 +145,19 @@ void av_freep(void *ptr);
*/
void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem);
/**
* Multiply two size_t values checking for overflow.
* @return 0 if success, AVERROR(EINVAL) if overflow.
*/
static inline int av_size_mult(size_t a, size_t b, size_t *r)
{
size_t t = a * b;
/* Hack inspired from glibc: only try the division if nelem and elsize
* are both greater than sqrt(SIZE_MAX). */
if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b)
return AVERROR(EINVAL);
*r = t;
return 0;
}
#endif /* AVUTIL_MEM_H */
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment