diff -u HTML-Parser-3.26/hparser.c HTML-Parser-3.26.simpleslashfix/hparser.c
--- HTML-Parser-3.26/hparser.c Sun Mar 17 15:07:57 2002
+++ HTML-Parser-3.26.simpleslashfix/hparser.c Fri Mar 22 13:23:17 2002
@@ -1101,14 +1101,21 @@
hctype_t tag_name_first, tag_name_char;
hctype_t attr_name_first, attr_name_char;
- if (p_state->strict_names || p_state->xml_mode) {
+ if (p_state->strict_names) {
tag_name_first = attr_name_first = HCTYPE_NAME_FIRST;
tag_name_char = attr_name_char = HCTYPE_NAME_CHAR;
}
else {
- tag_name_first = tag_name_char = HCTYPE_NOT_SPACE_GT;
- attr_name_first = HCTYPE_NOT_SPACE_GT;
- attr_name_char = HCTYPE_NOT_SPACE_EQ_GT;
+ if (p_state->xml_mode) {
+ tag_name_first = tag_name_char = HCTYPE_NOT_SPACE_SLASH_GT;
+ attr_name_first = HCTYPE_NOT_SPACE_SLASH_GT;
+ attr_name_char = HCTYPE_NOT_SPACE_EQ_GT;
+ }
+ else {
+ tag_name_first = tag_name_char = HCTYPE_NOT_SPACE_GT;
+ attr_name_first = HCTYPE_NOT_SPACE_GT;
+ attr_name_char = HCTYPE_NOT_SPACE_EQ_GT;
+ }
}
s += 2;
@@ -1165,8 +1172,11 @@
else {
char *word_start = s;
while (s < end && isHNOT_SPACE_GT(*s)) {
- if (p_state->xml_mode && *s == '/')
- break;
+ if (p_state->xml_mode && *s == '/') {
+ /* look ahead to see if the tag ends */
+ if ((s+1)==end || *(s+1)=='>')
+ break;
+ }
s++;
}
if (s == end)