mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-03-28 12:32:17 +02:00
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> (cherry picked from commit c9bfd6a8c35a2102e730aca12f6e09d1627f76b3) Conflicts: libavutil/channel_layout.c
This commit is contained in:
parent
e98f3ba221
commit
6acf5ff1d3
@ -125,6 +125,8 @@ static uint64_t get_channel_layout_single(const char *name, int name_len)
|
|||||||
strlen(channel_names[i].name) == name_len &&
|
strlen(channel_names[i].name) == name_len &&
|
||||||
!memcmp(channel_names[i].name, name, name_len))
|
!memcmp(channel_names[i].name, name, name_len))
|
||||||
return (int64_t)1 << i;
|
return (int64_t)1 << i;
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
i = strtol(name, &end, 10);
|
i = strtol(name, &end, 10);
|
||||||
|
|
||||||
#if FF_API_GET_CHANNEL_LAYOUT_COMPAT
|
#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 {
|
} else {
|
||||||
#endif
|
#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);
|
return av_get_default_channel_layout(i);
|
||||||
#if FF_API_GET_CHANNEL_LAYOUT_COMPAT
|
#if FF_API_GET_CHANNEL_LAYOUT_COMPAT
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
errno = 0;
|
||||||
layout = strtoll(name, &end, 0);
|
layout = strtoll(name, &end, 0);
|
||||||
if (end - name == name_len)
|
if (!errno && end - name == name_len)
|
||||||
return FFMAX(layout, 0);
|
return FFMAX(layout, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user