diff --git a/libavutil/channel_layout.c b/libavutil/channel_layout.c
index a59ba4610f2d10b246e1592efb87d67f610ccd65..601c7e677c9596bf13cc6e03cdc8a5489f1bee97 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;
 }