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

Ronald S. Bultje rsbultje
Wed Dec 22 20:54:46 CET 2010


Hi,

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.

Ronald



More information about the ffmpeg-devel mailing list