ffmpeg | branch: master | Steven Liu <[email protected]> | Thu Oct 10 10:43:58 2019 +0800| [1f7b527194a2a10c334b0ff66ec0a72f4fe65e08] | committer: Steven Liu
avformat/libsrt: check av_strdup() return value and fix memleak Signed-off-by: Steven Liu <[email protected]> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1f7b527194a2a10c334b0ff66ec0a72f4fe65e08 --- libavformat/libsrt.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/libavformat/libsrt.c b/libavformat/libsrt.c index b5568089fa..1c34ec50b2 100644 --- a/libavformat/libsrt.c +++ b/libavformat/libsrt.c @@ -478,6 +478,7 @@ static int libsrt_open(URLContext *h, const char *uri, int flags) SRTContext *s = h->priv_data; const char * p; char buf[256]; + int ret = 0; if (srt_startup() < 0) { return AVERROR_UNKNOWN; @@ -564,10 +565,18 @@ static int libsrt_open(URLContext *h, const char *uri, int flags) if (av_find_info_tag(buf, sizeof(buf), "streamid", p)) { av_freep(&s->streamid); s->streamid = av_strdup(buf); + if (!s->streamid) { + ret = AVERROR(ENOMEM); + goto err; + } } if (av_find_info_tag(buf, sizeof(buf), "smoother", p)) { av_freep(&s->smoother); s->smoother = av_strdup(buf); + if(!s->smoother) { + ret = AVERROR(ENOMEM); + goto err; + } } if (av_find_info_tag(buf, sizeof(buf), "messageapi", p)) { s->messageapi = strtol(buf, NULL, 10); @@ -578,11 +587,16 @@ static int libsrt_open(URLContext *h, const char *uri, int flags) } else if (!strcmp(buf, "file")) { s->transtype = SRTT_FILE; } else { - return AVERROR(EINVAL); + ret = AVERROR(EINVAL); + goto err; } } } return libsrt_setup(h, uri, flags); +err: + av_freep(&s->smoother); + av_freep(&s->streamid); + return ret; } static int libsrt_read(URLContext *h, uint8_t *buf, int size) _______________________________________________ ffmpeg-cvslog mailing list [email protected] https://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog To unsubscribe, visit link above, or email [email protected] with subject "unsubscribe".
