aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-02-12 13:27:17 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-04-30 09:02:27 +0200
commit8f51a89d66aacd9dc5896bac22e62cbd566e7a71 (patch)
treef31cbb77faa688e0982ede7ead4f0494cf1d4208
parent09bac9009ea5fd1b458fe1567bd95a9948c44508 (diff)
downloadffmpeg-8f51a89d66aacd9dc5896bac22e62cbd566e7a71.tar.gz
avcodec/avpacket: Don't write into non-writable buffer
The data of an AVPacket may be a part of the data of an AVBufferRef; Therefore av_grow_packet() doesn't reallocate if the available space in the actual buffer is sufficient for the enlargement. But given that it also zeroes the padding it also needs to make sure that the buffer is actually writable; this commit implements this. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
-rw-r--r--libavcodec/avpacket.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index 55b509108e..ee51c0799c 100644
--- a/libavcodec/avpacket.c
+++ b/libavcodec/avpacket.c
@@ -128,7 +128,8 @@ int av_grow_packet(AVPacket *pkt, int grow_by)
return AVERROR(ENOMEM);
}
- if (new_size + data_offset > pkt->buf->size) {
+ if (new_size + data_offset > pkt->buf->size ||
+ !av_buffer_is_writable(pkt->buf)) {
int ret = av_buffer_realloc(&pkt->buf, new_size + data_offset);
if (ret < 0) {
pkt->data = old_data;