summaryrefslogtreecommitdiff
path: root/libavcodec/avpacket.c
diff options
context:
space:
mode:
authorAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-02-12 12:18:23 +0100
committerAndreas Rheinhardt <andreas.rheinhardt@gmail.com>2020-03-28 03:54:48 +0100
commite621f2b6cd95a69db637d0ed979cf9e614b58cac (patch)
tree3f4eff2af4490919179f89eda036fdf0451ff3cb /libavcodec/avpacket.c
parent26a36801c0496ec0975af1b7af3ced220aa2aa18 (diff)
avcodec/avpacket: Always treat dst in av_packet_ref as uninitialized
av_packet_ref() mostly treated the destination packet dst as uninitialized, i.e. the destination fields were simply overwritten. But if the source packet was not reference-counted, dst->buf was treated as if it pointed to an already allocated buffer (if != NULL) to be reallocated to the desired size. The documentation did not explicitly state whether the dst will be treated as uninitialized, but it stated that if the source packet is not refcounted, a new buffer in dst will be allocated. This and the fact that the side-data as well as the codepath taken in case src is refcounted always treated the packet as uninitialized means that dst should always be treated as uninitialized for the sake of consistency. And this behaviour has been explicitly documented. Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavcodec/avpacket.c')
-rw-r--r--libavcodec/avpacket.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index b5667659fd..132567bc2d 100644
--- a/libavcodec/avpacket.c
+++ b/libavcodec/avpacket.c
@@ -615,6 +615,7 @@ int av_packet_ref(AVPacket *dst, const AVPacket *src)
return ret;
if (!src->buf) {
+ dst->buf = NULL;
ret = packet_alloc(&dst->buf, src->size);
if (ret < 0)
goto fail;