Prevent infinite recursion with nested table and textarea

Bug-Debian: https://github.com/tats/w3m/issues/20#issuecomment-260590257
This commit is contained in:
Tatsuya Kinoshita
2016-11-15 20:11:52 +09:00
parent 61e50c5faf
commit 2a4a2fb9f1
3 changed files with 15 additions and 0 deletions
+1
View File
@@ -6448,6 +6448,7 @@ HTMLlineproc0(char *line, struct html_feed_environ *h_env, int internal)
do_blankline(h_env, obuf, indent, 0, h_env->limit);
}
save_fonteffect(h_env, obuf);
initRenderTable();
renderTable(tbl, tbl_width, h_env);
restore_fonteffect(h_env, obuf);
obuf->flag &= ~RB_IGNORE_P;
+1
View File
@@ -393,6 +393,7 @@ extern void align(TextLine *lbuf, int width, int mode);
extern void print_item(struct table *t, int row, int col, int width, Str buf);
extern void print_sep(struct table *t, int row, int type, int maxcol, Str buf);
extern void do_refill(struct table *tbl, int row, int col, int maxlimit);
extern void initRenderTable(void);
extern void renderTable(struct table *t, int max_width,
struct html_feed_environ *h_env);
extern struct table *begin_table(int border, int spacing, int padding,
+13
View File
@@ -1623,6 +1623,15 @@ get_table_width(struct table *t, short *orgwidth, short *cellwidth, int flag)
#define fixed_table_width(t)\
(get_table_width(t,t->fixed_width,t->cell.fixed_width,CHECK_MINIMUM))
#define MAX_COTABLE_LEVEL 100
static int cotable_level;
void
initRenderTable(void)
{
cotable_level = 0;
}
void
renderCoTable(struct table *tbl, int maxlimit)
{
@@ -1633,6 +1642,10 @@ renderCoTable(struct table *tbl, int maxlimit)
int i, col, row;
int indent, maxwidth;
if (cotable_level >= MAX_COTABLE_LEVEL)
return; /* workaround to prevent infinite recursion */
cotable_level++;
for (i = 0; i < tbl->ntable; i++) {
t = tbl->tables[i].ptr;
col = tbl->tables[i].col;