diff options
author | Mans Rullgard <mans@mansr.com> | 2012-10-06 10:21:22 +0100 |
---|---|---|
committer | Mans Rullgard <mans@mansr.com> | 2012-10-06 17:08:29 +0100 |
commit | 6221e2478c593a0ce1183eed929cb2101dbf5265 (patch) | |
tree | 3c472baf16c0abb5f99e6d5c15fba8a5f2a15f3f | |
parent | 37ac11d92e8068d8d55345fb3e2bbe340c91e16a (diff) | |
download | ffmpeg-6221e2478c593a0ce1183eed929cb2101dbf5265.tar.gz |
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>
-rw-r--r-- | libavutil/parseutils.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/libavutil/parseutils.c b/libavutil/parseutils.c index 0ca179ea80..d3f08b72ed 100644 --- a/libavutil/parseutils.c +++ b/libavutil/parseutils.c @@ -355,7 +355,7 @@ int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen, } if (tail) { - unsigned long int alpha; + double alpha; const char *alpha_string = tail; if (!strncmp(alpha_string, "0x", 2)) { 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); } - 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", alpha_string, color_string); return AVERROR(EINVAL); |