]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't accept whitespace or hex floats in rgbi: colour specs
authorMattias Engdegård <mattiase@acm.org>
Sun, 6 Mar 2022 09:50:27 +0000 (10:50 +0100)
committerMattias Engdegård <mattiase@acm.org>
Sun, 6 Mar 2022 13:07:26 +0000 (14:07 +0100)
`color-values-from-color-spec` (new in Emacs 28) erroneously accepted
leading whitespace and hex floats in rgbi: components.

Reported by Philip Kaludercic.

* src/xfaces.c (parse_float_color_comp): Disallow leading whitespace
and hex floats.
* test/src/xfaces-tests.el
(xfaces-internal-color-values-from-color-spec): Add test cases.

src/xfaces.c
test/src/xfaces-tests.el

index 8100bdb1570c30d7b5e039819c17e67246d42d04..1d2e2489de1b7c81006070395cfd347eac14dc77 100644 (file)
@@ -888,6 +888,11 @@ parse_hex_color_comp (const char *s, const char *e, unsigned short *dst)
 static double
 parse_float_color_comp (const char *s, const char *e)
 {
+  /* Only allow decimal float literals without whitespace.  */
+  for (const char *p = s; p < e; p++)
+    if (!((*p >= '0' && *p <= '9')
+         || *p == '.' || *p == '+' || *p == '-' || *p == 'e' || *p == 'E'))
+      return -1;
   char *end;
   double x = strtod (s, &end);
   return (end == e && x >= 0 && x <= 1) ? x : -1;
index 31c0f021b28963d67a938adbe419bef18a31e5e4..16f1653791800094c6fcb771ff01606af2ccb5ba 100644 (file)
                  '(0 32768 6554)))
   (should (equal (color-values-from-color-spec "rgbi:1e-3/1.0e-2/1e0")
                  '(66 655 65535)))
-  (should (equal (color-values-from-color-spec "rgbi:0/0.5/10") nil)))
+  (should (equal (color-values-from-color-spec "rgbi:0/0.5/10") nil))
+  (should (equal (color-values-from-color-spec "rgbi:0/0/ 0") nil))
+  (should (equal (color-values-from-color-spec "rgbi:0/0x0/0") nil))
+  (should (equal (color-values-from-color-spec "rgbi:0/+0x1/0") nil)))
 
 (provide 'xfaces-tests)