[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
master 64e25cd: More robust NS hex colour string parsing
From: |
Mattias Engdegård |
Subject: |
master 64e25cd: More robust NS hex colour string parsing |
Date: |
Mon, 8 Jun 2020 08:07:47 -0400 (EDT) |
branch: master
commit 64e25cde324b2e270acf82958abb59018e67f841
Author: Mattias Engdegård <mattiase@acm.org>
Commit: Mattias Engdegård <mattiase@acm.org>
More robust NS hex colour string parsing
Invalid arguments to color-values, such as "#abcdefg" or "#1234", or
valid ones like "#111222333", should not yield nonsense values.
* src/nsterm.m (ns_get_color):
Only accept "#RGB" strings with 1-4 digits per components, equal number
of digits each, and no trailing characters. Parse 12-bit colours
correctly.
---
src/nsterm.m | 21 ++++++++++++---------
1 file changed, 12 insertions(+), 9 deletions(-)
diff --git a/src/nsterm.m b/src/nsterm.m
index 1953138..3dc7e1d 100644
--- a/src/nsterm.m
+++ b/src/nsterm.m
@@ -2399,20 +2399,23 @@ ns_get_color (const char *name, NSColor **col)
scaling = (snprintf (hex, sizeof hex, "%s", name + 4) - 2) / 3;
else if (name[0] == '#') /* An old X11 format; convert to newer */
{
- int len = (strlen(name) - 1);
- int start = (len % 3 == 0) ? 1 : len / 4 + 1;
- int i;
- scaling = strlen(name+start) / 3;
- for (i = 0; i < 3; i++)
- sprintf (hex + i * (scaling + 1), "%.*s/", scaling,
- name + start + i * scaling);
- hex[3 * (scaling + 1) - 1] = '\0';
+ int len = 0;
+ while (isxdigit (name[len + 1]))
+ len++;
+ if (name[len + 1] == '\0' && len >= 1 && len <= 12 && len % 3 == 0)
+ {
+ scaling = len / 3;
+ for (int i = 0; i < 3; i++)
+ sprintf (hex + i * (scaling + 1), "%.*s/", scaling,
+ name + 1 + i * scaling);
+ hex[3 * (scaling + 1) - 1] = '\0';
+ }
}
if (hex[0])
{
unsigned int rr, gg, bb;
- float fscale = scaling == 4 ? 65535.0 : (scaling == 2 ? 255.0 : 15.0);
+ float fscale = (1 << (scaling * 4)) - 1;
if (sscanf (hex, "%x/%x/%x", &rr, &gg, &bb))
{
r = rr / fscale;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- master 64e25cd: More robust NS hex colour string parsing,
Mattias Engdegård <=