Browse Source

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@niedermayer.cc>
tags/n3.0
Michael Niedermayer 9 years ago
parent
commit
c9bfd6a8c3
1 changed files with 5 additions and 2 deletions
  1. +5
    -2
      libavutil/channel_layout.c

+ 5
- 2
libavutil/channel_layout.c View File

@@ -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;
}


Loading…
Cancel
Save