Author: jmb
Date: Wed Jan 21 18:45:26 2009
New Revision: 6167

URL: http://source.netsurf-browser.org?rev=6167&view=rev
Log:
Move isDigit() and isHex() to utils.h.
Fix #rgb/#rrggbb parsing to ensure that the characters are valid hex digits.

Modified:
    trunk/libcss/src/lex/lex.c
    trunk/libcss/src/parse/properties.c
    trunk/libcss/src/utils/utils.h

Modified: trunk/libcss/src/lex/lex.c
URL: 
http://source.netsurf-browser.org/trunk/libcss/src/lex/lex.c?rev=6167&r1=6166&r2=6167&view=diff
==============================================================================
--- trunk/libcss/src/lex/lex.c (original)
+++ trunk/libcss/src/lex/lex.c Wed Jan 21 18:45:26 2009
@@ -163,8 +163,6 @@
 static inline bool startNMStart(uint8_t c);
 static inline bool startStringChar(uint8_t c);
 static inline bool startURLChar(uint8_t c);
-static inline bool isDigit(uint8_t c);
-static inline bool isHex(uint8_t c);
 static inline bool isSpace(uint8_t c);
 
 /**
@@ -2133,16 +2131,6 @@
                ('*' <= c && c <= '~') || c >= 0x80 || c == '\\';
 }
 
-bool isDigit(uint8_t c)
-{
-       return '0' <= c && c <= '9';
-}
-
-bool isHex(uint8_t c)
-{
-       return isDigit(c) || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F');
-}
-
 bool isSpace(uint8_t c)
 {
        return c == ' ' || c == '\r' || c == '\n' || c == '\f' || c == '\t';

Modified: trunk/libcss/src/parse/properties.c
URL: 
http://source.netsurf-browser.org/trunk/libcss/src/parse/properties.c?rev=6167&r1=6166&r2=6167&view=diff
==============================================================================
--- trunk/libcss/src/parse/properties.c (original)
+++ trunk/libcss/src/parse/properties.c Wed Jan 21 18:45:26 2009
@@ -6479,7 +6479,10 @@
        if (token->type == CSS_TOKEN_IDENT) {
                /** \todo Parse colour names */
        } else if (token->type == CSS_TOKEN_HASH) {
-               if (token->idata->len == 3) {
+               if (token->idata->len == 3 &&
+                               isHex(token->idata->data[0]) &&
+                               isHex(token->idata->data[1]) &&
+                               isHex(token->idata->data[2])) {
                        r = charToHex(token->idata->data[0]);
                        g = charToHex(token->idata->data[1]);
                        b = charToHex(token->idata->data[2]);
@@ -6487,7 +6490,13 @@
                        r |= (r << 4);
                        g |= (g << 4);
                        b |= (b << 4);
-               } else if (token->idata->len == 6) {
+               } else if (token->idata->len == 6 &&
+                               isHex(token->idata->data[0]) &&
+                               isHex(token->idata->data[1]) &&
+                               isHex(token->idata->data[2]) &&
+                               isHex(token->idata->data[3]) &&
+                               isHex(token->idata->data[4]) &&
+                               isHex(token->idata->data[5])) {
                        r = (charToHex(token->idata->data[0]) << 4);
                        r |= charToHex(token->idata->data[1]);
                        g = (charToHex(token->idata->data[2]) << 4);

Modified: trunk/libcss/src/utils/utils.h
URL: 
http://source.netsurf-browser.org/trunk/libcss/src/utils/utils.h?rev=6167&r1=6166&r2=6167&view=diff
==============================================================================
--- trunk/libcss/src/utils/utils.h (original)
+++ trunk/libcss/src/utils/utils.h Wed Jan 21 18:45:26 2009
@@ -125,6 +125,16 @@
        return FMULI(((intpart << 10) | fracpart), sign);
 }
 
+static inline bool isDigit(uint8_t c)
+{
+       return '0' <= c && c <= '9';
+}
+
+static inline bool isHex(uint8_t c)
+{
+       return isDigit(c) || ('a' <= c && c <= 'f') || ('A' <= c && c <= 'F');
+}
+
 static inline uint32_t charToHex(uint8_t c)
 {
        switch (c) {


_______________________________________________
netsurf-commits mailing list
[email protected]
http://vlists.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to