Commit 252746d0 authored by Stefano Sabatini's avatar Stefano Sabatini

lavu/imgutils: add consistency checks to av_image_copy_plane()

Add assertions and abort in case of invalid |dst_linesize| < bytewidth or
|src_linesize| < bytewidth.

Avoid to silently corrupt memory.
parent 26c531cc
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
* misc image utilities * misc image utilities
*/ */
#include "avassert.h"
#include "common.h" #include "common.h"
#include "imgutils.h" #include "imgutils.h"
#include "internal.h" #include "internal.h"
...@@ -244,6 +245,8 @@ void av_image_copy_plane(uint8_t *dst, int dst_linesize, ...@@ -244,6 +245,8 @@ void av_image_copy_plane(uint8_t *dst, int dst_linesize,
{ {
if (!dst || !src) if (!dst || !src)
return; return;
av_assert0(abs(src_linesize) >= bytewidth);
av_assert0(abs(dst_linesize) >= bytewidth);
for (;height > 0; height--) { for (;height > 0; height--) {
memcpy(dst, src, bytewidth); memcpy(dst, src, bytewidth);
dst += dst_linesize; dst += dst_linesize;
......
...@@ -99,6 +99,9 @@ int av_image_alloc(uint8_t *pointers[4], int linesizes[4], ...@@ -99,6 +99,9 @@ int av_image_alloc(uint8_t *pointers[4], int linesizes[4],
* The first byte of each successive line is separated by *_linesize * The first byte of each successive line is separated by *_linesize
* bytes. * bytes.
* *
* bytewidth must be contained by both absolute values of dst_linesize
* and src_linesize, otherwise the function behavior is undefined.
*
* @param dst_linesize linesize for the image plane in dst * @param dst_linesize linesize for the image plane in dst
* @param src_linesize linesize for the image plane in src * @param src_linesize linesize for the image plane in src
*/ */
......
...@@ -76,7 +76,7 @@ ...@@ -76,7 +76,7 @@
#define LIBAVUTIL_VERSION_MAJOR 52 #define LIBAVUTIL_VERSION_MAJOR 52
#define LIBAVUTIL_VERSION_MINOR 9 #define LIBAVUTIL_VERSION_MINOR 9
#define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_MICRO 101
#define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
LIBAVUTIL_VERSION_MINOR, \ LIBAVUTIL_VERSION_MINOR, \
......
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