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