avformat/rtmpproto: fix listen_timeout conversion for special negative values

rtmpproto converts listen_timeout to milliseconds by multiplying it
by 1000 before passing it to TCP. However, negative values are special
sentinels (e.g., -1 for infinite wait) and should not be multiplied.

This worked prior to commit 49c6e6cc44 because there was no range
validation. Since that commit, ff_parse_opts_from_query_string
validates option values against their declared ranges, causing these
multiplied negative values to fail.

Fixes ticket #22469.

Signed-off-by: Zhao Zhili <zhilizhao@tencent.com>
This commit is contained in:
Zhao Zhili
2026-03-11 21:48:33 +08:00
committed by Zhao Zhili
parent b4b569f922
commit f189657ec6

View File

@@ -2736,7 +2736,8 @@ static int rtmp_open(URLContext *s, const char *uri, int flags, AVDictionary **o
if (rt->listen)
ff_url_join(buf, sizeof(buf), "tcp", NULL, hostname, port,
"?listen&listen_timeout=%d&tcp_nodelay=%d",
rt->listen_timeout * 1000, rt->tcp_nodelay);
rt->listen_timeout < 0 ? -1 : rt->listen_timeout * 1000,
rt->tcp_nodelay);
else
ff_url_join(buf, sizeof(buf), "tcp", NULL, hostname, port, "?tcp_nodelay=%d", rt->tcp_nodelay);
}