Compare commits

...

3 Commits

Author SHA1 Message Date
Michael Niedermayer 5b98cea4bf
avformat/sctp: Check size in sctp_write()
Fixes: out of array access
No testcase

Found-by: Joshua Rogers <joshua@joshua.hu> with ZeroPath
Reviewed-by: Joshua Rogers <joshua@joshua.hu>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2025-11-01 23:22:32 +01:00
Michael Niedermayer 83e0298de2
avformat/rtmpproto: consider command line argument lengths
Fixes: out of array access
Fixes: zeropath/rtmp-2025-10

Found-by: Joshua Rogers <joshua@joshua.hu>
Reviewed-by: Joshua Rogers <joshua@joshua.hu>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2025-11-01 19:54:07 +01:00
Michael Niedermayer a64e037429
avformat/rtmpproto_ Check tcurl and flashver length
Fixes: out of array accesses

Reviewed-by: Joshua Rogers <joshua@joshua.hu>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2025-11-01 19:53:46 +01:00
2 changed files with 29 additions and 2 deletions

View File

@ -163,6 +163,13 @@ static int handle_chunk_size(URLContext *s, RTMPPacket *pkt);
static int handle_window_ack_size(URLContext *s, RTMPPacket *pkt);
static int handle_set_peer_bw(URLContext *s, RTMPPacket *pkt);
static size_t zstrlen(const char *c)
{
if(c)
return strlen(c);
return 0;
}
static int add_tracked_method(RTMPContext *rt, const char *name, int id)
{
int err;
@ -327,7 +334,16 @@ static int gen_connect(URLContext *s, RTMPContext *rt)
int ret;
if ((ret = ff_rtmp_packet_create(&pkt, RTMP_SYSTEM_CHANNEL, RTMP_PT_INVOKE,
0, 4096 + APP_MAX_LENGTH)) < 0)
0, 4096 + APP_MAX_LENGTH
+ strlen(rt->auth_params) + strlen(rt->flashver)
+ zstrlen(rt->enhanced_codecs)/5*7
+ zstrlen(rt->swfurl)
+ zstrlen(rt->swfverify)
+ zstrlen(rt->tcurl)
+ zstrlen(rt->auth_params)
+ zstrlen(rt->pageurl)
+ zstrlen(rt->conn)*3
)) < 0)
return ret;
p = pkt.data;
@ -1926,7 +1942,9 @@ static int write_status(URLContext *s, RTMPPacket *pkt,
if ((ret = ff_rtmp_packet_create(&spkt, RTMP_SYSTEM_CHANNEL,
RTMP_PT_INVOKE, 0,
RTMP_PKTDATA_DEFAULT_SIZE)) < 0) {
RTMP_PKTDATA_DEFAULT_SIZE
+ strlen(status) + strlen(description)
+ zstrlen(details))) < 0) {
av_log(s, AV_LOG_ERROR, "Unable to create response packet\n");
return ret;
}
@ -2859,6 +2877,12 @@ reconnect:
"FMLE/3.0 (compatible; %s)", LIBAVFORMAT_IDENT);
}
}
if ( strlen(rt->flashver) > FLASHVER_MAX_LENGTH
|| strlen(rt->tcurl ) > TCURL_MAX_LENGTH
) {
ret = AVERROR(EINVAL);
goto fail;
}
rt->receive_report_size = 1048576;
rt->bytes_read = 0;

View File

@ -332,6 +332,9 @@ static int sctp_write(URLContext *h, const uint8_t *buf, int size)
}
if (s->max_streams) {
if (size < 2)
return AVERROR(EINVAL);
/*StreamId is introduced as a 2byte code into the stream*/
struct sctp_sndrcvinfo info = { 0 };
info.sinfo_stream = AV_RB16(buf);