diff --git a/src/document/html/parser/table.c b/src/document/html/parser/table.c index e6d03645..519af497 100644 --- a/src/document/html/parser/table.c +++ b/src/document/html/parser/table.c @@ -533,10 +533,10 @@ parse_table(unsigned char *html, unsigned char *eof, unsigned char **end, { struct table *table; struct table_cell *cell; - unsigned char *t_name, *t_attr, *en, *name; + unsigned char *t_attr, *en, *name; unsigned char *l_fragment_id = NULL; color_T last_bgcolor; - int t_namelen, namelen; + int namelen; int in_cell = 0; int l_al = ALIGN_LEFT; int l_val = VALIGN_MIDDLE; @@ -579,13 +579,11 @@ see: goto se; } - if (parse_element(html, eof, &t_name, &t_namelen, &t_attr, &en)) { + if (parse_element(html, eof, &name, &namelen, &t_attr, &en)) { html++; goto se; } - name = t_name; - namelen = t_namelen; if (name[0] == '/') { name++; namelen--; closing_tag = 1; @@ -691,7 +689,7 @@ see: } /* TR */ - if (t_namelen == 2 && toupper(t_name[1]) == 'R') { + if (!closing_tag && namelen == 2 && toupper(name[1]) == 'R') { if (c_span) new_columns(table, c_span, c_width, c_al, c_val, 1); if (in_cell) { @@ -716,10 +714,10 @@ see: } /* THEAD TBODY TFOOT */ - if (t_namelen == 5 - && ((!strncasecmp(&t_name[1], "HEAD", 4)) || - (!strncasecmp(&t_name[1], "BODY", 4)) || - (!strncasecmp(&t_name[1], "FOOT", 4)))) { + if (!closing_tag && namelen == 5 + && ((!strncasecmp(&name[1], "HEAD", 4)) || + (!strncasecmp(&name[1], "BODY", 4)) || + (!strncasecmp(&name[1], "FOOT", 4)))) { if (c_span) new_columns(table, c_span, c_width, c_al, c_val, 1); add_table_bad_html_end(table, html); @@ -728,9 +726,11 @@ see: } /* TD TH */ - if (t_namelen != 2 - || (toupper(t_name[1]) != 'D' - && toupper(t_name[1]) != 'H')) + if (closing_tag) goto see; + if (namelen != 2) goto see; + + if (toupper(name[1]) != 'D' + && toupper(name[1]) != 'H') goto see; if (c_span) new_columns(table, c_span, c_width, c_al, c_val, 1); @@ -770,7 +770,7 @@ see: l_fragment_id = NULL; } - cell->is_header = (toupper(t_name[1]) == 'H'); + cell->is_header = (toupper(name[1]) == 'H'); if (cell->is_header) cell->align = ALIGN_CENTER; if (group == 1) cell->is_group = 1;