fixed problem with comments reported by Nick Kew added routines
* HTMLparser.c: fixed problem with comments reported by Nick Kew
* encoding.c: added routines xmlUTF8Size and xmlUTF8Charcmp for
some future cleanup of UTF8 handling
diff --git a/ChangeLog b/ChangeLog
index fe52aad..ea4e735 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Tue Jul 29 12:28:17 HKT 2003 William Brack <wbrack@mmm.com.hk>
+
+ * HTMLparser.c: fixed problem with comments reported by Nick Kew
+ * encoding.c: added routines xmlUTF8Size and xmlUTF8Charcmp for
+ some future cleanup of UTF8 handling
+
Mon Jul 28 16:39:14 EDT 2003 Daniel Veillard <daniel@veillard.com>
* xpath.c: applied a change suggested by Sean Griffin in bug
diff --git a/HTMLparser.c b/HTMLparser.c
index e7dcb34..2ee458c 100644
--- a/HTMLparser.c
+++ b/HTMLparser.c
@@ -4358,10 +4358,11 @@
(buf[base + 2] == '-') && (buf[base + 3] == '-')) {
incomment = 1;
}
- /* do not increment base, some people use <!--> */
+ /* do not increment past <!, some people use <!--> */
+ base += 2;
}
if (incomment) {
- if (base + 3 < len)
+ if (base + 3 > len)
return(-1);
if ((buf[base] == '-') && (buf[base + 1] == '-') &&
(buf[base + 2] == '>')) {
diff --git a/encoding.c b/encoding.c
index 8d43f45..5cefd39 100644
--- a/encoding.c
+++ b/encoding.c
@@ -85,6 +85,53 @@
************************************************************************/
/**
+ * xmlUTF8Size:
+ * @utf: pointer to the UTF8 character
+ *
+ * returns the numbers of bytes in the character, -1 on format error
+ */
+int
+xmlUTF8Size(const xmlChar *utf) {
+ xmlChar mask;
+ int len;
+
+ if (utf == NULL)
+ return -1;
+ if (*utf < 0x80)
+ return 1;
+ /* check valid UTF8 character */
+ if (!(*utf & 0x40))
+ return -1;
+ /* determine number of bytes in char */
+ len = 2;
+ for (mask=0x20; mask != 0; mask>>=1) {
+ if (!(*utf & mask))
+ return len;
+ len++;
+ }
+ return -1;
+}
+
+/**
+ * xmlUTF8Charcmp
+ * @utf1: pointer to first UTF8 char
+ * @utf2: pointer to second UTF8 char
+ *
+ * returns result of comparing the two UCS4 values
+ * as with xmlStrncmp
+ */
+int
+xmlUTF8Charcmp(const xmlChar *utf1, const xmlChar *utf2) {
+
+ if (utf1 == NULL ) {
+ if (utf2 == NULL)
+ return 0;
+ return -1;
+ }
+ return xmlStrncmp(utf1, utf2, xsltUTF8Size(utf1));
+}
+
+/**
* xmlUTF8Strlen:
* @utf: a sequence of UTF-8 encoded bytes
*
diff --git a/include/libxml/encoding.h b/include/libxml/encoding.h
index 3c0fbb9..9841e14 100644
--- a/include/libxml/encoding.h
+++ b/include/libxml/encoding.h
@@ -208,7 +208,6 @@
*/
int xmlCheckUTF8 (const unsigned char *utf);
-
int xmlUTF8Strsize (const xmlChar *utf,
int len);
xmlChar * xmlUTF8Strndup (const xmlChar *utf,
@@ -220,9 +219,10 @@
xmlChar * xmlUTF8Strsub (const xmlChar *utf,
int start,
int len);
-
int xmlUTF8Strlen (const xmlChar *utf);
-
+int xmlUTF8Size (const xmlChar *utf);
+int xmlUTF8Charcmp (const xmlChar *utf1,
+ const xmlChar *utf2);
#ifdef __cplusplus
}
#endif