[FFmpeg-devel] [PATCH] avutil: add av_memcpy() to avoid undefined behavior with NULL, NULL, 0
James Almer
jamrial at gmail.com
Wed Jul 3 02:42:43 EEST 2019
On 7/2/2019 5:56 PM, Michael Niedermayer wrote:
> Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> ---
> doc/APIchanges | 3 +++
> libavutil/mem.h | 13 +++++++++++++
> libavutil/version.h | 2 +-
> 3 files changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/doc/APIchanges b/doc/APIchanges
> index b5fadc2a48..65b8ed74ad 100644
> --- a/doc/APIchanges
> +++ b/doc/APIchanges
> @@ -15,6 +15,9 @@ libavutil: 2017-10-21
>
> API changes, most recent first:
>
> +2019-07-XX - XXXXXXXXXX - lavu 56.31.100 - mem.h
> + Add av_memcpy()
> +
> 2019-06-21 - XXXXXXXXXX - lavu 56.30.100 - frame.h
> Add FF_DECODE_ERROR_DECODE_SLICES
>
> diff --git a/libavutil/mem.h b/libavutil/mem.h
> index 5fb1a02dd9..a35230360d 100644
> --- a/libavutil/mem.h
> +++ b/libavutil/mem.h
> @@ -506,6 +506,19 @@ void *av_memdup(const void *p, size_t size);
> */
> void av_memcpy_backptr(uint8_t *dst, int back, int cnt);
>
> +/**
> + * memcpy() implementation without a NULL pointer special case
> + *
> + * @param dst Destination buffer
> + * @param src Source buffer
> + * @param cnt Number of bytes to copy; must be >= 0
> + */
> +static inline void av_memcpy(void *dst, const void *src, size_t cnt)
How many cases are there in the codebase where cnt can be 0, and dst or
src NULL, without it having been checked before calling memcpy? And from
those, which would not be from situations where the code should have
instead aborted and returned ENOMEM, or EINVAL if either of them are
function arguments?
> +{
> + if (cnt)
> + memcpy(dst, src, cnt);
> +}
> +
> /**
> * @}
> */
> diff --git a/libavutil/version.h b/libavutil/version.h
> index e16b93e877..24ca8ab7db 100644
> --- a/libavutil/version.h
> +++ b/libavutil/version.h
> @@ -79,7 +79,7 @@
> */
>
> #define LIBAVUTIL_VERSION_MAJOR 56
> -#define LIBAVUTIL_VERSION_MINOR 30
> +#define LIBAVUTIL_VERSION_MINOR 31
> #define LIBAVUTIL_VERSION_MICRO 100
>
> #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
>
More information about the ffmpeg-devel
mailing list