[SCM] libav/experimental: rtsp: Require the transport reply from the server to match the request

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 17:20:45 UTC 2013


The following commit has been merged in the experimental branch:
commit 8c579c1c604306460436dcf1523117ca3b1aca82
Author: Martin Storsjö <martin at martin.st>
Date:   Thu Dec 23 15:05:24 2010 +0000

    rtsp: Require the transport reply from the server to match the request
    
    This fixes a crash if we requested TCP interleaved transport, but the
    server replies with transport data for UDP. According to the RFC, the
    server isn't allowed to respond with another transport type than the
    one requested.
    
    Originally committed as revision 26077 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 2703400..48ed6b5 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1111,11 +1111,12 @@ static int make_setup_request(AVFormatContext *s, const char *host, int port,
             rt->transport = reply->transports[0].transport;
         }
 
-        /* close RTP connection if not chosen */
-        if (reply->transports[0].lower_transport != RTSP_LOWER_TRANSPORT_UDP &&
-            (lower_transport == RTSP_LOWER_TRANSPORT_UDP)) {
-            url_close(rtsp_st->rtp_handle);
-            rtsp_st->rtp_handle = NULL;
+        /* Fail if the server responded with another lower transport mode
+         * than what we requested. */
+        if (reply->transports[0].lower_transport != lower_transport) {
+            av_log(s, AV_LOG_ERROR, "Nonmatching transport in server reply\n");
+            err = AVERROR_INVALIDDATA;
+            goto fail;
         }
 
         switch(reply->transports[0].lower_transport) {

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list