Author: jmb
Date: Tue Jun 30 18:44:32 2009
New Revision: 8212
URL:
http://source.netsurf-browser.org?rev=8212&view=rev
Log:
Stop running over the end of lwc string data.
Modified:
branches/jmb/ns-libcss/css/select.c
Modified: branches/jmb/ns-libcss/css/select.c
URL:
http://source.netsurf-browser.org/branches/jmb/ns-libcss/css/select.c?rev...
==============================================================================
--- branches/jmb/ns-libcss/css/select.c (original)
+++ branches/jmb/ns-libcss/css/select.c Tue Jun 30 18:44:32 2009
@@ -1,3 +1,4 @@
+#include <alloca.h>
#include <string.h>
#include "css/select.h"
@@ -168,8 +169,11 @@
for (n = n->parent; n != NULL && n->type == XML_ELEMENT_NODE;
n = n->parent) {
- bool match = strcasecmp((const char *) n->name,
- lwc_string_data(name)) == 0;
+ bool match = strlen((const char *) n->name) ==
+ lwc_string_length(name) &&
+ strncasecmp((const char *) n->name,
+ lwc_string_data(name),
+ lwc_string_length(name)) == 0;
if (match)
break;
@@ -187,8 +191,11 @@
*parent = NULL;
if (n->parent != NULL && n->parent->type == XML_ELEMENT_NODE &&
- strcasecmp((const char *) n->name,
- lwc_string_data(name)) == 0)
+ strlen((const char *) n->parent->name) ==
+ lwc_string_length(name) &&
+ strncasecmp((const char *) n->parent->name,
+ lwc_string_data(name),
+ lwc_string_length(name)) == 0)
*parent = (void *) n->parent;
return CSS_OK;
@@ -201,8 +208,11 @@
*sibling = NULL;
if (n->prev != NULL && n->prev->type == XML_ELEMENT_NODE &&
- strcasecmp((const char *) n->name,
- lwc_string_data(name)) == 0)
+ strlen((const char *) n->prev->name) ==
+ lwc_string_length(name) &&
+ strncasecmp((const char *) n->prev->name,
+ lwc_string_data(name),
+ lwc_string_length(name)) == 0)
*sibling = (void *) n->prev;
return CSS_OK;
@@ -242,7 +252,11 @@
class = xmlGetProp(n, (const xmlChar *) "class");
if (class != NULL) {
- *match = strcmp((char *) class, lwc_string_data(name)) == 0;
+ *match = strlen((const char *) class) ==
+ lwc_string_length(name) &&
+ strncmp((const char *) class,
+ lwc_string_data(name),
+ lwc_string_length(name)) == 0;
xmlFree(class);
}
@@ -259,7 +273,11 @@
id = xmlGetProp(n, (const xmlChar *) "id");
if (id != NULL) {
- *match = strcmp((char *) id, lwc_string_data(name)) == 0;
+ *match = strlen((const char *) id) ==
+ lwc_string_length(name) &&
+ strncmp((const char *) id,
+ lwc_string_data(name),
+ lwc_string_length(name)) == 0;
xmlFree(id);
}
@@ -271,8 +289,12 @@
{
xmlNode *n = node;
xmlAttr *attr;
-
- attr = xmlHasProp(n, (const xmlChar *) lwc_string_data(name));
+ char *buf = alloca(lwc_string_length(name) + 1);
+
+ memcpy(buf, lwc_string_data(name), lwc_string_length(name));
+ buf[lwc_string_length(name)] = '\0';
+
+ attr = xmlHasProp(n, (const xmlChar *) buf);
*match = attr != NULL;
return CSS_OK;
@@ -285,12 +307,20 @@
{
xmlNode *n = node;
xmlChar *attr;
+ char *buf = alloca(lwc_string_length(name) + 1);
+
+ memcpy(buf, lwc_string_data(name), lwc_string_length(name));
+ buf[lwc_string_length(name)] = '\0';
*match = false;
- attr = xmlGetProp(n, (const xmlChar *) lwc_string_data(name));
+ attr = xmlGetProp(n, (const xmlChar *) buf);
if (attr != NULL) {
- *match = strcmp((char *) attr, lwc_string_data(value)) == 0;
+ *match = strlen((const char *) attr) ==
+ lwc_string_length(value) &&
+ strncmp((const char *) attr,
+ lwc_string_data(value),
+ lwc_string_length(value)) == 0;
xmlFree(attr);
}
@@ -304,11 +334,15 @@
{
xmlNode *n = node;
xmlChar *attr;
+ char *buf = alloca(lwc_string_length(name) + 1);
size_t vlen = lwc_string_length(value);
+ memcpy(buf, lwc_string_data(name), lwc_string_length(name));
+ buf[lwc_string_length(name)] = '\0';
+
*match = false;
- attr = xmlGetProp(n, (const xmlChar *) lwc_string_data(name));
+ attr = xmlGetProp(n, (const xmlChar *) buf);
if (attr != NULL) {
const char *p;
const char *start = (const char *) attr;
@@ -340,11 +374,15 @@
{
xmlNode *n = node;
xmlChar *attr;
+ char *buf = alloca(lwc_string_length(name) + 1);
size_t vlen = lwc_string_length(value);
+ memcpy(buf, lwc_string_data(name), lwc_string_length(name));
+ buf[lwc_string_length(name)] = '\0';
+
*match = false;
- attr = xmlGetProp(n, (const xmlChar *) lwc_string_data(name));
+ attr = xmlGetProp(n, (const xmlChar *) buf);
if (attr != NULL) {
const char *p;
const char *start = (const char *) attr;