parseutils: fix parsing of invalid alpha values
An alpha specifier outside the valid range results in a conversion from double to long with undefined result. Range-checking the double and only converting it after it passes avoids this. Fixes fate-parseutils errors on some systems. Signed-off-by: Mans Rullgard <mans@mansr.com>
This commit is contained in:
parent
37ac11d92e
commit
6221e2478c
@ -355,7 +355,7 @@ int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (tail) {
|
if (tail) {
|
||||||
unsigned long int alpha;
|
double alpha;
|
||||||
const char *alpha_string = tail;
|
const char *alpha_string = tail;
|
||||||
if (!strncmp(alpha_string, "0x", 2)) {
|
if (!strncmp(alpha_string, "0x", 2)) {
|
||||||
alpha = strtoul(alpha_string, &tail, 16);
|
alpha = strtoul(alpha_string, &tail, 16);
|
||||||
@ -363,7 +363,7 @@ int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen,
|
|||||||
alpha = 255 * strtod(alpha_string, &tail);
|
alpha = 255 * strtod(alpha_string, &tail);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tail == alpha_string || *tail || alpha > 255) {
|
if (tail == alpha_string || *tail || alpha > 255 || alpha < 0) {
|
||||||
av_log(log_ctx, AV_LOG_ERROR, "Invalid alpha value specifier '%s' in '%s'\n",
|
av_log(log_ctx, AV_LOG_ERROR, "Invalid alpha value specifier '%s' in '%s'\n",
|
||||||
alpha_string, color_string);
|
alpha_string, color_string);
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
|
Loading…
Reference in New Issue
Block a user