summaryrefslogtreecommitdiff
path: root/libavcodec/exr.c
diff options
context:
space:
mode:
authorPaul B Mahol <onemda@gmail.com>2022-09-22 10:28:36 +0200
committerPaul B Mahol <onemda@gmail.com>2022-09-22 10:31:03 +0200
commitf55f81795552d8f0a5d287973203bfce9cffe51e (patch)
tree25f83622d89ba9cecb8504832fc4e363428f7625 /libavcodec/exr.c
parentc9aa6164d4b7bd73f0fcc1800e4f1cc49ead9bb5 (diff)
avcodec/exr: fix skipping too long metadata values
Diffstat (limited to 'libavcodec/exr.c')
-rw-r--r--libavcodec/exr.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/libavcodec/exr.c b/libavcodec/exr.c
index e381e77e3f..f10754d6ae 100644
--- a/libavcodec/exr.c
+++ b/libavcodec/exr.c
@@ -1962,7 +1962,7 @@ static int decode_header(EXRContext *s, AVFrame *frame)
{
uint8_t name[256] = { 0 };
uint8_t type[256] = { 0 };
- uint8_t value[256] = { 0 };
+ uint8_t value[8192] = { 0 };
int i = 0, size;
while (bytestream2_get_bytes_left(gb) > 0 &&
@@ -1980,6 +1980,8 @@ static int decode_header(EXRContext *s, AVFrame *frame)
size = bytestream2_get_le32(gb);
bytestream2_get_buffer(gb, value, FFMIN(sizeof(value) - 1, size));
+ if (size > sizeof(value) - 1)
+ bytestream2_skip(gb, size - (sizeof(value) - 1));
if (!strcmp(type, "string"))
av_dict_set(&metadata, name, value, 0);
}