Prevents leaking the previously allocated buffer, honoring the expected behavior
of keeping the packet unchanged in case of error.

Signed-off-by: James Almer <[email protected]>
---
Now using av_reallocp() as suggested. Should still be backported to release/12.

 libavcodec/avpacket.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/libavcodec/avpacket.c b/libavcodec/avpacket.c
index f2b0a29..863659c 100644
--- a/libavcodec/avpacket.c
+++ b/libavcodec/avpacket.c
@@ -240,15 +240,14 @@ FF_ENABLE_DEPRECATION_WARNINGS
 int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
                             uint8_t *data, size_t size)
 {
-    int elems = pkt->side_data_elems;
+    int ret, elems = pkt->side_data_elems;
 
     if ((unsigned)elems + 1 > INT_MAX / sizeof(*pkt->side_data))
         return AVERROR(ERANGE);
 
-    pkt->side_data = av_realloc(pkt->side_data,
-                                (elems + 1) * sizeof(*pkt->side_data));
-    if (!pkt->side_data)
-        return AVERROR(ENOMEM);
+    ret = av_reallocp(&pkt->side_data, (elems + 1) * sizeof(*pkt->side_data));
+    if (ret < 0)
+        return ret;
 
     pkt->side_data[elems].data = data;
     pkt->side_data[elems].size = size;
-- 
2.10.1

_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel

Reply via email to