Apply by doing:
        cd /usr/src
        patch -p0 < 023_lynx.patch

Then rebuild and install lynx:
        cd gnu/usr.bin/lynx
        make -f Makefile.bsd-wrapper obj
        make -f Makefile.bsd-wrapper
        make -f Makefile.bsd-wrapper install

Index: gnu/usr.bin/lynx/userdefs.h
===================================================================
RCS file: /cvs/src/gnu/usr.bin/lynx/userdefs.h,v
retrieving revision 1.5
retrieving revision 1.5.4.1
diff -u -p -r1.5 -r1.5.4.1
--- gnu/usr.bin/lynx/userdefs.h	1 May 2003 18:59:36 -0000	1.5
+++ gnu/usr.bin/lynx/userdefs.h	6 Nov 2004 04:00:43 -0000	1.5.4.1
@@ -1370,6 +1370,8 @@
 #define MAXCHARSETS 60		/* max character sets supported */
 #define TRST_MAXROWSPAN 10000	/* max rowspan accepted by TRST code */
 #define TRST_MAXCOLSPAN 1000	/* max colspan and COL/COLGROUP span accepted */
+#define MAX_TABLE_ROWS  200	/* max rows for tables */
+#define MAX_TABLE_COLS  200	/* max cols for tables */
 #define SAVE_TIME_NOT_SPACE	/* minimize number of some malloc calls */
 
 /* Win32 may support more, but old win16 helper apps may not. */
Index: gnu/usr.bin/lynx/src/GridText.c
===================================================================
RCS file: /cvs/src/gnu/usr.bin/lynx/src/GridText.c,v
retrieving revision 1.3
retrieving revision 1.3.4.1
diff -u -p -r1.3 -r1.3.4.1
--- gnu/usr.bin/lynx/src/GridText.c	1 May 2003 18:59:38 -0000	1.3
+++ gnu/usr.bin/lynx/src/GridText.c	6 Nov 2004 04:00:44 -0000	1.3.4.1
@@ -9270,8 +9270,8 @@ PUBLIC int HText_beginInput ARGS3(
     /*
      *  Set SIZE.
      */
-    if (I->size != NULL) {
-	f->size = atoi(I->size);
+    if (I->size != 0) {
+	f->size = I->size;
 	/*
 	 *  Leave at zero for option lists.
 	 */
Index: gnu/usr.bin/lynx/src/HTForms.h
===================================================================
RCS file: /cvs/src/gnu/usr.bin/lynx/src/HTForms.h,v
retrieving revision 1.3
retrieving revision 1.3.4.1
diff -u -p -r1.3 -r1.3.4.1
--- gnu/usr.bin/lynx/src/HTForms.h	1 May 2003 18:59:38 -0000	1.3
+++ gnu/usr.bin/lynx/src/HTForms.h	6 Nov 2004 04:00:44 -0000	1.3.4.1
@@ -40,7 +40,7 @@ typedef struct _InputFieldData {
 	CONST char *md;
 	CONST char *min;
 	CONST char *name;
-	CONST char *size;
+	int   size;
 	CONST char *src;
 	CONST char *type;
 	char *value;
Index: gnu/usr.bin/lynx/src/HTML.c
===================================================================
RCS file: /cvs/src/gnu/usr.bin/lynx/src/HTML.c,v
retrieving revision 1.3
retrieving revision 1.3.4.1
diff -u -p -r1.3 -r1.3.4.1
--- gnu/usr.bin/lynx/src/HTML.c	1 May 2003 18:59:38 -0000	1.3
+++ gnu/usr.bin/lynx/src/HTML.c	6 Nov 2004 04:00:44 -0000	1.3.4.1
@@ -84,6 +84,19 @@
 
 #define STACKLEVEL(me) ((me->stack + MAX_NESTING - 1) - me->sp)
 
+#define DFT_TEXTAREA_COLS 60
+#define DFT_TEXTAREA_ROWS 4
+
+#define MAX_TEXTAREA_COLS LYcolLimit
+#define MAX_TEXTAREA_ROWS (3 * LYlines)
+
+#define LimitValue(name, value) \
+	if (name > value) { \
+		CTRACE((tfp, "Limited " #name " to %d, was %d\n", \
+			value, name)); \
+		name = value; \
+	}
+
 extern BOOL HTPassEightBitRaw;
 
 extern BOOLEAN HT_Is_Gopher_URL;
@@ -4709,7 +4722,7 @@ PRIVATE int HTML_start_element ARGS6(
 	    I.align=NULL; I.accept=NULL; I.checked=NO; I.class=NULL;
 	    I.disabled=NO; I.error=NULL; I.height= NULL; I.id=NULL;
 	    I.lang=NULL; I.max=NULL; I.maxlength=NULL; I.md=NULL;
-	    I.min=NULL; I.name=NULL; I.size=NULL; I.src=NULL;
+	    I.min=NULL; I.name=NULL; I.size=0; I.src=NULL;
 	    I.type=NULL; I.value=NULL; I.width=NULL;
 	    I.accept_cs = NULL;
 	    I.name_cs = ATTR_CS_IN;
@@ -4895,7 +4908,7 @@ PRIVATE int HTML_start_element ARGS6(
 	    I.align=NULL; I.accept=NULL; I.checked=NO; I.class=NULL;
 	    I.disabled=NO; I.error=NULL; I.height= NULL; I.id=NULL;
 	    I.lang=NULL; I.max=NULL; I.maxlength=NULL; I.md=NULL;
-	    I.min=NULL; I.name=NULL; I.size=NULL; I.src=NULL;
+	    I.min=NULL; I.name=NULL; I.size=0; I.src=NULL;
 	    I.type=NULL; I.value=NULL; I.width=NULL;
 	    I.accept_cs = NULL;
 	    I.name_cs = ATTR_CS_IN;
@@ -5199,7 +5212,7 @@ PRIVATE int HTML_start_element ARGS6(
 		I.checked = YES;
 	    if (present && present[HTML_INPUT_SIZE] &&
 		value[HTML_INPUT_SIZE] && *value[HTML_INPUT_SIZE])
-		I.size = value[HTML_INPUT_SIZE];
+		I.size = atoi(value[HTML_INPUT_SIZE]);
 	    if (present && present[HTML_INPUT_MAXLENGTH] &&
 		value[HTML_INPUT_MAXLENGTH] && *value[HTML_INPUT_MAXLENGTH])
 		I.maxlength = value[HTML_INPUT_MAXLENGTH];
@@ -5430,26 +5443,28 @@ PRIVATE int HTML_start_element ARGS6(
 	if (present && present[HTML_TEXTAREA_COLS] &&
 	    value[HTML_TEXTAREA_COLS] &&
 	    isdigit(UCH(*value[HTML_TEXTAREA_COLS])))
-	    StrAllocCopy(me->textarea_cols, value[HTML_TEXTAREA_COLS]);
+	    me->textarea_cols = atoi(value[HTML_TEXTAREA_COLS]);
 	else {
 	    int width;
 	    width = LYcols - 1 -
 		    me->new_style->leftIndent - me->new_style->rightIndent;
 	    if (dump_output_immediately) /* don't waste too much for this */
-		width = HTMIN(width, 60);
+		width = HTMIN(width, DFT_TEXTAREA_COLS);
 	    if (width > 1 && (width-1)*6 < MAX_LINE - 3 -
 		me->new_style->leftIndent - me->new_style->rightIndent)
-		HTSprintf0(&me->textarea_cols, "%d", width);
+		me->textarea_cols = width;
 	    else
-		StrAllocCopy(me->textarea_cols, "60");
+		me->textarea_cols = DFT_TEXTAREA_COLS;
 	}
+	LimitValue(me->textarea_cols, MAX_TEXTAREA_COLS);
 
 	if (present && present[HTML_TEXTAREA_ROWS] &&
 	    value[HTML_TEXTAREA_ROWS] &&
 	    isdigit(UCH(*value[HTML_TEXTAREA_ROWS])))
 	    me->textarea_rows = atoi(value[HTML_TEXTAREA_ROWS]);
 	else
-	    me->textarea_rows = 4;
+	    me->textarea_rows = DFT_TEXTAREA_ROWS;
+	LimitValue(me->textarea_rows, MAX_TEXTAREA_ROWS);
 
 	if (present && present[HTML_TEXTAREA_DISABLED])
 	    me->textarea_disabled = YES;
@@ -5566,7 +5581,7 @@ PRIVATE int HTML_start_element ARGS6(
 		I.align=NULL; I.accept=NULL; I.checked=NO; I.class=NULL;
 		I.disabled=NO; I.error=NULL; I.height= NULL; I.id=NULL;
 		I.lang=NULL; I.max=NULL; I.maxlength=NULL; I.md=NULL;
-		I.min=NULL; I.name=NULL; I.size=NULL; I.src=NULL;
+		I.min=NULL; I.name=NULL; I.size=0; I.src=NULL;
 		I.type=NULL; I.value=NULL; I.width=NULL;
 		I.accept_cs = NULL;
 		I.name_cs = -1;
@@ -7231,7 +7246,7 @@ End_Object:
 	    I.align=NULL; I.accept=NULL; I.checked=NO; I.class=NULL;
 	    I.disabled=NO; I.error=NULL; I.height= NULL; I.id=NULL;
 	    I.lang=NULL; I.max=NULL; I.maxlength=NULL; I.md=NULL;
-	    I.min=NULL; I.name=NULL; I.size=NULL; I.src=NULL;
+	    I.min=NULL; I.name=NULL; I.size=0; I.src=NULL;
 	    I.type=NULL; I.value=NULL; I.width=NULL;
 	    I.value_cs = current_char_set;
 
@@ -7382,7 +7397,7 @@ End_Object:
 		}
 		I.value = temp;
 		chars = HText_beginInput(me->text, me->inUnderline, &I);
-		for (chars = atoi(me->textarea_cols); chars > 0; chars--)
+		for (chars = me->textarea_cols; chars > 0; chars--)
 		    HTML_put_character(me, '_');
 		HText_appendCharacter(me->text, '\r');
 		if (*data == '\n') {
@@ -7407,7 +7422,6 @@ End_Object:
 	    HTChunkClear(&me->textarea);
 	    FREE(me->textarea_name);
 	    me->textarea_name_cs = -1;
-	    FREE(me->textarea_cols);
 	    FREE(me->textarea_id);
 	    break;
 	}
@@ -7964,7 +7978,6 @@ PRIVATE void HTML_abort ARGS2(HTStructur
     FREE(me->map_address);
     FREE(me->textarea_name);
     FREE(me->textarea_accept_cs);
-    FREE(me->textarea_cols);
     FREE(me->textarea_id);
     FREE(me->LastOptionValue);
     FREE(me->xinclude);
@@ -8142,7 +8155,7 @@ PUBLIC HTStructured* HTML_new ARGS3(
     me->textarea_name = NULL;
     me->textarea_name_cs = -1;
     me->textarea_accept_cs = NULL;
-    me->textarea_cols = NULL;
+    me->textarea_cols = 0;
     me->textarea_rows = 4;
     me->textarea_disabled = NO;
     me->textarea_id = NULL;
Index: gnu/usr.bin/lynx/src/HTML.h
===================================================================
RCS file: /cvs/src/gnu/usr.bin/lynx/src/HTML.h,v
retrieving revision 1.3
retrieving revision 1.3.4.1
diff -u -p -r1.3 -r1.3.4.1
--- gnu/usr.bin/lynx/src/HTML.h	1 May 2003 18:59:39 -0000	1.3
+++ gnu/usr.bin/lynx/src/HTML.h	6 Nov 2004 04:00:44 -0000	1.3.4.1
@@ -104,7 +104,7 @@ struct _HTStructured {
     char *			textarea_name;
     int				textarea_name_cs;
     char *			textarea_accept_cs;
-    char *			textarea_cols;
+    int				textarea_cols;
     int 			textarea_rows;
     int				textarea_disabled;
     char *			textarea_id;
Index: gnu/usr.bin/lynx/src/LYCurses.h
===================================================================
RCS file: /cvs/src/gnu/usr.bin/lynx/src/LYCurses.h,v
retrieving revision 1.3
retrieving revision 1.3.4.1
diff -u -p -r1.3 -r1.3.4.1
--- gnu/usr.bin/lynx/src/LYCurses.h	1 May 2003 18:59:39 -0000	1.3
+++ gnu/usr.bin/lynx/src/LYCurses.h	6 Nov 2004 04:00:44 -0000	1.3.4.1
@@ -311,6 +311,24 @@ extern WINDOW *LYstartPopup PARAMS((int 
 extern int LYlines;	/* replaces LINES */
 extern int LYcols;	/* replaces COLS */
 
+/*
+ * The scrollbar, if used, occupies the rightmost column.
+ */
+#ifdef USE_SCROLLBAR
+#define LYbarWidth (LYShowScrollbar ? 1 : 0)
+#else
+#define LYbarWidth 0
+#endif
+
+/*
+ * Usable limits for display:
+ */
+#if defined(FANCY_CURSES) || defined(USE_SLANG)
+#define LYcolLimit (LYcols - LYbarWidth)
+#else
+#define LYcolLimit (LYcols - 1)
+#endif
+
 #ifdef USE_CURSES_PADS
 extern WINDOW *LYwin;
 extern int LYshiftWin;
