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:
Mans Rullgard 2012-10-06 10:21:22 +01:00
parent 37ac11d92e
commit 6221e2478c
1 changed files with 2 additions and 2 deletions

View File

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