[FFmpeg-cvslog] libavutil/channel_layout: Check strtol*() for failure

Michael Niedermayer git at videolan.org
Thu Nov 12 04:07:45 CET 2015


ffmpeg | branch: release/2.7 | Michael Niedermayer <michael at niedermayer.cc> | Thu Nov  5 19:24:33 2015 +0100| [6acf5ff1d3c5bb3cfcaa1847f8c26e3e3aead1bc] | 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>
(cherry picked from commit c9bfd6a8c35a2102e730aca12f6e09d1627f76b3)

Conflicts:

	libavutil/channel_layout.c

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6acf5ff1d3c5bb3cfcaa1847f8c26e3e3aead1bc
---

 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 cd5cf42..45249c4 100644
--- a/libavutil/channel_layout.c
+++ b/libavutil/channel_layout.c
@@ -125,6 +125,8 @@ 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 FF_API_GET_CHANNEL_LAYOUT_COMPAT
@@ -143,14 +145,15 @@ static uint64_t get_channel_layout_single(const char *name, int name_len)
         }
     } else {
 #endif
-    if ((end + 1 - name == name_len && *end  == 'c'))
+    if (!errno && (end + 1 - name == name_len && *end  == 'c'))
         return av_get_default_channel_layout(i);
 #if FF_API_GET_CHANNEL_LAYOUT_COMPAT
     }
 #endif
 
+    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