diff --git a/libavformat/rtsp.c b/libavformat/rtsp.c
index a56ff9954749693c2f35b8c6270a3840ad17ad41..dec6995c4621b96b189d169cbcd98e229e8a5ffb 100644
--- a/libavformat/rtsp.c
+++ b/libavformat/rtsp.c
@@ -1795,8 +1795,9 @@ static int sdp_read_header(AVFormatContext *s, AVFormatParameters *ap)
     }
     content[size] ='\0';
 
-    ff_sdp_parse(s, content);
+    err = ff_sdp_parse(s, content);
     av_free(content);
+    if (err) goto fail;
 
     /* open each RTP stream */
     for (i = 0; i < rt->nb_rtsp_streams; i++) {
diff --git a/libavformat/rtspdec.c b/libavformat/rtspdec.c
index 55996e3631ffdfc6f71ad442d06c359012f74d44..f95f7c3851b1179b530422da3363bfddeb77d817 100644
--- a/libavformat/rtspdec.c
+++ b/libavformat/rtspdec.c
@@ -136,7 +136,7 @@ int ff_rtsp_setup_input_streams(AVFormatContext *s, RTSPMessageHeader *reply)
     ret = ff_sdp_parse(s, (const char *)content);
     av_freep(&content);
     if (ret < 0)
-        return AVERROR_INVALIDDATA;
+        return ret;
 
     return 0;
 }