mirror of
https://git.videolan.org/git/ffmpeg.git
synced 2024-08-21 08:45:06 +02:00
Introduce av_size_mult.
av_size_mult helps checking for overflow when computing the size of a memory area. Signed-off-by: Nicolas George <nicolas.george@normalesup.org> Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
e89f58810d
commit
b2600509fe
@ -27,6 +27,7 @@
|
|||||||
#define AVUTIL_MEM_H
|
#define AVUTIL_MEM_H
|
||||||
|
|
||||||
#include "attributes.h"
|
#include "attributes.h"
|
||||||
|
#include "error.h"
|
||||||
#include "avutil.h"
|
#include "avutil.h"
|
||||||
|
|
||||||
#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C)
|
#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);
|
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 */
|
#endif /* AVUTIL_MEM_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user