aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat
diff options
context:
space:
mode:
authorLimin Wang <lance.lmwang@gmail.com>2021-12-06 10:37:08 +0800
committerLimin Wang <lance.lmwang@gmail.com>2021-12-07 20:33:17 +0800
commit6d42af02f566c2a14a72bc13517add071c1d2a2b (patch)
treeb1ba567a303720c45d1f553e42bc28068882dee6 /libavformat
parentf210766a55ea2db85b01038e0f4a4b8891d1903b (diff)
downloadffmpeg-6d42af02f566c2a14a72bc13517add071c1d2a2b.tar.gz
avformat/rtsp: add error code handling for ff_rtsp_skip_packet()
Reviewed-by: Martin Storsjö <martin@martin.st> Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
Diffstat (limited to 'libavformat')
-rw-r--r--libavformat/rtsp.c15
-rw-r--r--libavformat/rtsp.h4
-rw-r--r--libavformat/rtspenc.c7
3 files changed, 18 insertions, 8 deletions
diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index 5cffe0b6b5..bf25429187 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1145,7 +1145,7 @@ void ff_rtsp_parse_line(AVFormatContext *s,
}
/* skip a RTP/TCP interleaved packet */
-void ff_rtsp_skip_packet(AVFormatContext *s)
+int ff_rtsp_skip_packet(AVFormatContext *s)
{
RTSPState *rt = s->priv_data;
int ret, len, len1;
@@ -1153,7 +1153,7 @@ void ff_rtsp_skip_packet(AVFormatContext *s)
ret = ffurl_read_complete(rt->rtsp_hd, buf, 3);
if (ret != 3)
- return;
+ return ret < 0 ? ret : AVERROR(EIO);
len = AV_RB16(buf + 1);
av_log(s, AV_LOG_TRACE, "skipping RTP packet len=%d\n", len);
@@ -1165,9 +1165,11 @@ void ff_rtsp_skip_packet(AVFormatContext *s)
len1 = sizeof(buf);
ret = ffurl_read_complete(rt->rtsp_hd, buf, len1);
if (ret != len1)
- return;
+ return ret < 0 ? ret : AVERROR(EIO);
len -= len1;
}
+
+ return 0;
}
int ff_rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
@@ -1201,8 +1203,11 @@ start:
if (ch == '$' && q == buf) {
if (return_on_interleaved_data) {
return 1;
- } else
- ff_rtsp_skip_packet(s);
+ } else {
+ ret = ff_rtsp_skip_packet(s);
+ if (ret < 0)
+ return ret;
+ }
} else if (ch != '\r') {
if ((q - buf) < sizeof(buf) - 1)
*q++ = ch;
diff --git a/libavformat/rtsp.h b/libavformat/rtsp.h
index d6fdfe069c..8b64e29d70 100644
--- a/libavformat/rtsp.h
+++ b/libavformat/rtsp.h
@@ -560,8 +560,10 @@ int ff_rtsp_read_reply(AVFormatContext *s, RTSPMessageHeader *reply,
/**
* Skip a RTP/TCP interleaved packet.
+ *
+ * @return 0 on success, < 0 on failure.
*/
-void ff_rtsp_skip_packet(AVFormatContext *s);
+int ff_rtsp_skip_packet(AVFormatContext *s);
/**
* Connect to the RTSP server and set up the individual media streams.
diff --git a/libavformat/rtspenc.c b/libavformat/rtspenc.c
index e0fed1eebe..2a00b3e18d 100644
--- a/libavformat/rtspenc.c
+++ b/libavformat/rtspenc.c
@@ -200,8 +200,11 @@ static int rtsp_write_packet(AVFormatContext *s, AVPacket *pkt)
ret = ff_rtsp_read_reply(s, &reply, NULL, 1, NULL);
if (ret < 0)
return AVERROR(EPIPE);
- if (ret == 1)
- ff_rtsp_skip_packet(s);
+ if (ret == 1) {
+ ret = ff_rtsp_skip_packet(s);
+ if (ret < 0)
+ return ret;
+ }
/* XXX: parse message */
if (rt->state != RTSP_STATE_STREAMING)
return AVERROR(EPIPE);