[FFmpeg-cvslog] rtmp: Don't try to do av_malloc(0)

Martin Storsjö git at videolan.org
Thu May 26 03:32:24 CEST 2011


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Wed May 25 19:08:29 2011 +0300| [271c869cc3285dac2b6f2663a87c70bf3ba2b04f] | committer: Martin Storsjö

rtmp: Don't try to do av_malloc(0)

Some received packets can have size 0. The return value from
av_malloc(0) may be NULL, which is ok if the size was 0. On
OS X, however, the returned pointer is non-null but leads to
crashes when trying to free it.

Signed-off-by: Martin Storsjö <martin at martin.st>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=271c869cc3285dac2b6f2663a87c70bf3ba2b04f
---

 libavformat/rtmppkt.c   |    2 ++
 libavformat/rtmpproto.c |    2 +-
 2 files changed, 3 insertions(+), 1 deletions(-)

diff --git a/libavformat/rtmppkt.c b/libavformat/rtmppkt.c
index 63b0628..93790eb 100644
--- a/libavformat/rtmppkt.c
+++ b/libavformat/rtmppkt.c
@@ -233,9 +233,11 @@ int ff_rtmp_packet_write(URLContext *h, RTMPPacket *pkt,
 int ff_rtmp_packet_create(RTMPPacket *pkt, int channel_id, RTMPPacketType type,
                           int timestamp, int size)
 {
+    if (size) {
     pkt->data = av_malloc(size);
     if (!pkt->data)
         return AVERROR(ENOMEM);
+    }
     pkt->data_size  = size;
     pkt->channel_id = channel_id;
     pkt->type       = type;
diff --git a/libavformat/rtmpproto.c b/libavformat/rtmpproto.c
index 70e4b14..f499bd3 100644
--- a/libavformat/rtmpproto.c
+++ b/libavformat/rtmpproto.c
@@ -683,7 +683,7 @@ static int get_packet(URLContext *s, int for_header)
         return AVERROR_EOF;
 
     for (;;) {
-        RTMPPacket rpkt;
+        RTMPPacket rpkt = { 0 };
         if ((ret = ff_rtmp_packet_read(rt->stream, &rpkt,
                                        rt->chunk_size, rt->prev_pkt[0])) <= 0) {
             if (ret == 0) {



More information about the ffmpeg-cvslog mailing list