[FFmpeg-cvslog] libavutil/channel_layout: Check strtol*() for failure
Michael Niedermayer
git at videolan.org
Thu Nov 5 20:48:02 CET 2015
ffmpeg | branch: master | Michael Niedermayer <michael at niedermayer.cc> | Thu Nov 5 19:24:33 2015 +0100| [c9bfd6a8c35a2102e730aca12f6e09d1627f76b3] | committer: Michael Niedermayer
libavutil/channel_layout: Check strtol*() for failure
Fixes assertion failure
Fixes: 4f5814bb15d2dda6fc18ef9791b13816/signal_sigabrt_7ffff6ae7cc9_65_7209d160d168b76f311be6cd64a548eb.wv
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michael at niedermayer.cc>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=c9bfd6a8c35a2102e730aca12f6e09d1627f76b3
---
libavutil/channel_layout.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/libavutil/channel_layout.c b/libavutil/channel_layout.c
index a59ba46..601c7e6 100644
--- a/libavutil/channel_layout.c
+++ b/libavutil/channel_layout.c
@@ -122,13 +122,16 @@ static uint64_t get_channel_layout_single(const char *name, int name_len)
strlen(channel_names[i].name) == name_len &&
!memcmp(channel_names[i].name, name, name_len))
return (int64_t)1 << i;
+
+ errno = 0;
i = strtol(name, &end, 10);
- if ((end + 1 - name == name_len && *end == 'c'))
+ if (!errno && (end + 1 - name == name_len && *end == 'c'))
return av_get_default_channel_layout(i);
+ errno = 0;
layout = strtoll(name, &end, 0);
- if (end - name == name_len)
+ if (!errno && end - name == name_len)
return FFMAX(layout, 0);
return 0;
}
More information about the ffmpeg-cvslog
mailing list