[FFmpeg-cvslog] srtp: Don't require more input data than what actually is needed

Martin Storsjö git at videolan.org
Mon Jan 21 15:17:26 CET 2013


ffmpeg | branch: master | Martin Storsjö <martin at martin.st> | Fri Jan 18 12:35:31 2013 +0200| [b4bb1d493c44853e0140b26eb2c0bbaac15e0db3] | committer: Martin Storsjö

srtp: Don't require more input data than what actually is needed

The theoretical minimum for a (not totally well formed) RTCP packet
is 8 bytes, so we shouldn't require 12 bytes as minimum input.

Also return AVERROR_INVALIDDATA instead of 0 if something that is
not a proper packet is given.

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

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

 libavformat/srtp.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/libavformat/srtp.c b/libavformat/srtp.c
index 192285f..d826b4e 100644
--- a/libavformat/srtp.c
+++ b/libavformat/srtp.c
@@ -243,8 +243,8 @@ int ff_srtp_encrypt(struct SRTPContext *s, const uint8_t *in, int len,
     int rtcp, hmac_size, padding;
     uint8_t *buf;
 
-    if (len < 12)
-        return 0;
+    if (len < 8)
+        return AVERROR_INVALIDDATA;
 
     rtcp = RTP_PT_IS_RTCP(in[1]);
     hmac_size = rtcp ? s->rtcp_hmac_size : s->rtp_hmac_size;
@@ -267,6 +267,10 @@ int ff_srtp_encrypt(struct SRTPContext *s, const uint8_t *in, int len,
     } else {
         int ext, csrc;
         int seq = AV_RB16(buf + 2);
+
+        if (len < 12)
+            return AVERROR_INVALIDDATA;
+
         ssrc = AV_RB32(buf + 8);
 
         if (seq < s->seq_largest)



More information about the ffmpeg-cvslog mailing list