[FFmpeg-devel] [PATCH] rtsp: Require the transport reply from the server to match the request

Martin Storsjö martin
Thu Dec 23 16:05:49 CET 2010


On Wed, 22 Dec 2010, Ronald S. Bultje wrote:

> On Wed, Dec 22, 2010 at 2:43 PM, Martin Storsjo <martin at martin.st> wrote:
> >
> > 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.
> > ---
> > ?libavformat/rtsp.c | ? 11 ++++++-----
> > ?1 files changed, 6 insertions(+), 5 deletions(-)
> >
> > 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) {
> 
> OK.

Applied

// Martin



More information about the ffmpeg-devel mailing list