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)