diff mbox series

[FFmpeg-devel,v2,1/3] avformat/rtsp: Set port_off to zero for low min/max port range

Message ID 20210704154027.13380-1-andriy.gelman@gmail.com
State Accepted
Commit 02387de90e71a6b035e3adf2446b6002ca135511
Headers show
Series [FFmpeg-devel,v2,1/3] avformat/rtsp: Set port_off to zero for low min/max port range | expand

Checks

Context Check Description
andriy/x86_make success Make finished
andriy/x86_make_fate success Make fate finished
andriy/PPC64_make success Make finished
andriy/PPC64_make_fate success Make fate finished

Commit Message

Andriy Gelman July 4, 2021, 3:40 p.m. UTC
From: Andriy Gelman <andriy.gelman@gmail.com>

Fixes:
$ ffmpeg -min_port 32000 -max_port 32001 -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov -f null -
[1]    303871 floating point exception (core dumped)

Signed-off-by: Andriy Gelman <andriy.gelman@gmail.com>
---
 libavformat/rtsp.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 9f509a229f..0185baca8e 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1438,7 +1438,7 @@  int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port,
                               int lower_transport, const char *real_challenge)
 {
     RTSPState *rt = s->priv_data;
-    int rtx = 0, j, i, err, interleave = 0, port_off;
+    int rtx = 0, j, i, err, interleave = 0, port_off = 0;
     RTSPStream *rtsp_st;
     RTSPMessageHeader reply1, *reply = &reply1;
     char cmd[MAX_URL_SIZE];
@@ -1457,9 +1457,11 @@  int ff_rtsp_make_setup_request(AVFormatContext *s, const char *host, int port,
     /* Choose a random starting offset within the first half of the
      * port range, to allow for a number of ports to try even if the offset
      * happens to be at the end of the random range. */
+    if (rt->rtp_port_max - rt->rtp_port_min >= 4) {
     port_off = av_get_random_seed() % ((rt->rtp_port_max - rt->rtp_port_min)/2);
     /* even random offset */
     port_off -= port_off & 0x01;
+    }
 
     for (j = rt->rtp_port_min + port_off, i = 0; i < rt->nb_rtsp_streams; ++i) {
         char transport[MAX_URL_SIZE];