parseutils: reliably detect out-of-range alpha.
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>
Tue, 24 Apr 2012 18:18:57 +0000 (20:18 +0200)
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>
Tue, 24 Apr 2012 19:28:24 +0000 (21:28 +0200)
This should fix the FATE test on ARM (not tested),
but it should also detect alpha values like 2^128
reliably as invalid which would be another out-of-range
case with implementation-dependant behaviour.

Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
libavutil/parseutils.c

index 064d490..037c4fb 100644 (file)
@@ -394,7 +394,11 @@ int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen,
         if (!strncmp(alpha_string, "0x", 2)) {
             alpha = strtoul(alpha_string, &tail, 16);
         } else {
-            alpha = 255 * strtod(alpha_string, &tail);
+            double norm_alpha = strtod(alpha_string, &tail);
+            if (norm_alpha < 0.0 || norm_alpha > 1.0)
+                alpha = 256;
+            else
+                alpha = 255 * norm_alpha;
         }
 
         if (tail == alpha_string || *tail || alpha > 255) {