On Sat, 6 Oct 2012, Mans Rullgard wrote:
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 <[email protected]>
---
libavutil/parseutils.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/libavutil/parseutils.c b/libavutil/parseutils.c
index 0ca179e..d3f08b7 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);
--
1.7.12
LGTM
// Martin
_______________________________________________
libav-devel mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-devel