diff options
author | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2021-03-09 23:25:06 +0300 |
---|---|---|
committer | Andreas Rheinhardt <andreas.rheinhardt@gmail.com> | 2021-03-15 08:45:07 +0300 |
commit | 520754476d9c2627b610fb9c508d0a85182d5a87 (patch) | |
tree | b9ac6101f94b4ee8c82e9e8bc8b1a6862dba9ad0 /libavutil | |
parent | c2649d5196843db46d25a9f9f6f9272a464221b7 (diff) |
avutil/avstring: Check for memory allocation error in av_escape
av_bprint_finalize() can still fail even when it has been checked that
the AVBPrint is currently complete: Namely if the string was so short
that it fit into the AVBPrint's internal buffer.
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@gmail.com>
Diffstat (limited to 'libavutil')
-rw-r--r-- | libavutil/avstring.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/libavutil/avstring.c b/libavutil/avstring.c index 832bec750f..49e8df55aa 100644 --- a/libavutil/avstring.c +++ b/libavutil/avstring.c @@ -336,6 +336,7 @@ int av_escape(char **dst, const char *src, const char *special_chars, enum AVEscapeMode mode, int flags) { AVBPrint dstbuf; + int ret; av_bprint_init(&dstbuf, 1, INT_MAX); /* (int)dstbuf.len must be >= 0 */ av_bprint_escape(&dstbuf, src, special_chars, mode, flags); @@ -343,10 +344,10 @@ int av_escape(char **dst, const char *src, const char *special_chars, if (!av_bprint_is_complete(&dstbuf)) { av_bprint_finalize(&dstbuf, NULL); return AVERROR(ENOMEM); - } else { - av_bprint_finalize(&dstbuf, dst); - return dstbuf.len; } + if ((ret = av_bprint_finalize(&dstbuf, dst)) < 0) + return ret; + return dstbuf.len; } int av_match_name(const char *name, const char *names) |