updated for version 7.3.1278
Problem:    When someone sets the screen size to a huge value with "stty" Vim
            runs out of memory before reducing the size.
Solution:   Limit Rows and Columns in more places.
diff --git a/src/gui.c b/src/gui.c
index 06a99e6..b667ba3 100644
--- a/src/gui.c
+++ b/src/gui.c
@@ -1620,6 +1620,7 @@
 	    un_maximize = FALSE;
 #endif
     }
+    limit_screen_size();
     gui.num_cols = Columns;
     gui.num_rows = Rows;
 
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index 853947c..05295bf 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -3698,6 +3698,7 @@
 		p_window = h - 1;
 	    Rows = h;
 	}
+	limit_screen_size();
 
 	pixel_width = (guint)(gui_get_base_width() + Columns * gui.char_width);
 	pixel_height = (guint)(gui_get_base_height() + Rows * gui.char_height);
diff --git a/src/option.c b/src/option.c
index d0e55a9..8911b01 100644
--- a/src/option.c
+++ b/src/option.c
@@ -8528,11 +8528,7 @@
 	}
 	Columns = MIN_COLUMNS;
     }
-    /* Limit the values to avoid an overflow in Rows * Columns. */
-    if (Columns > 10000)
-	Columns = 10000;
-    if (Rows > 1000)
-	Rows = 1000;
+    limit_screen_size();
 
 #ifdef DJGPP
     /* avoid a crash by checking for a too large value of 'columns' */
diff --git a/src/os_unix.c b/src/os_unix.c
index 8a7ae10..2223faf 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -3777,6 +3777,7 @@
 
     Rows = rows;
     Columns = columns;
+    limit_screen_size();
     return OK;
 }
 
diff --git a/src/proto/term.pro b/src/proto/term.pro
index 720d028..25d9b96 100644
--- a/src/proto/term.pro
+++ b/src/proto/term.pro
@@ -26,6 +26,7 @@
 void ttest __ARGS((int pairs));
 void add_long_to_buf __ARGS((long_u val, char_u *dst));
 void check_shellsize __ARGS((void));
+void limit_screen_size __ARGS((void));
 void win_new_shellsize __ARGS((void));
 void shell_resized __ARGS((void));
 void shell_resized_check __ARGS((void));
diff --git a/src/term.c b/src/term.c
index 003dd8b..c2c5cf8 100644
--- a/src/term.c
+++ b/src/term.c
@@ -2962,15 +2962,29 @@
 #endif
 
 /*
- * Check if the new shell size is valid, correct it if it's too small.
+ * Check if the new shell size is valid, correct it if it's too small or way
+ * too big.
  */
     void
 check_shellsize()
 {
-    if (Columns < MIN_COLUMNS)
-	Columns = MIN_COLUMNS;
     if (Rows < min_rows())	/* need room for one window and command line */
 	Rows = min_rows();
+    limit_screen_size();
+}
+
+/*
+ * Limit Rows and Columns to avoid an overflow in Rows * Columns.
+ */
+    void
+limit_screen_size()
+{
+    if (Columns < MIN_COLUMNS)
+	Columns = MIN_COLUMNS;
+    else if (Columns > 10000)
+	Columns = 10000;
+    if (Rows > 1000)
+	Rows = 1000;
 }
 
 /*
diff --git a/src/version.c b/src/version.c
index a3b0657..077c2a4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -729,6 +729,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1278,
+/**/
     1277,
 /**/
     1276,