Module Name:    src
Committed By:   christos
Date:           Sun Dec 17 17:49:04 UTC 2017

Modified Files:
        src/external/gpl3/gdb/dist/gdb/tui: tui-data.c tui-wingeneral.c
            tui-winsource.c

Log Message:
Don't core dump when the window is too small
XXX: feed upstream


To generate a diff of this commit:
cvs rdiff -u -r1.1.1.7 -r1.2 src/external/gpl3/gdb/dist/gdb/tui/tui-data.c \
    src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c \
    src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/external/gpl3/gdb/dist/gdb/tui/tui-data.c
diff -u src/external/gpl3/gdb/dist/gdb/tui/tui-data.c:1.1.1.7 src/external/gpl3/gdb/dist/gdb/tui/tui-data.c:1.2
--- src/external/gpl3/gdb/dist/gdb/tui/tui-data.c:1.1.1.7	Tue Nov 28 13:18:30 2017
+++ src/external/gpl3/gdb/dist/gdb/tui/tui-data.c	Sun Dec 17 12:49:04 2017
@@ -576,6 +576,9 @@ tui_alloc_content (int num_elements, enu
   struct tui_win_element *element_block_ptr;
   int i;
 
+  if (num_elements <= 0)
+    return NULL;
+
   content = XNEWVEC (struct tui_win_element *, num_elements);
 
   /*
Index: src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c
diff -u src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c:1.1.1.7 src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c:1.2
--- src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c:1.1.1.7	Tue Nov 28 13:18:30 2017
+++ src/external/gpl3/gdb/dist/gdb/tui/tui-wingeneral.c	Sun Dec 17 12:49:04 2017
@@ -247,32 +247,35 @@ tui_make_all_invisible (void)
   make_all_visible (0);
 }
 
+static void
+tui_refresh_wi(struct tui_gen_win_info *wi)
+{
+  if (wi == NULL || wi->handle == NULL || !wi->is_visible)
+    return;
+
+  touchwin (wi->handle);
+  tui_refresh_win (wi);
+}
+
 /* Function to refresh all the windows currently displayed.  */
 
 void
 tui_refresh_all (struct tui_win_info **list)
 {
   int type;
-  struct tui_gen_win_info *locator = tui_locator_win_info_ptr ();
 
   for (type = SRC_WIN; (type < MAX_MAJOR_WINDOWS); type++)
     {
-      if (list[type] && list[type]->generic.is_visible)
+      if (!list[type] || !list[type]->generic.is_visible)
+	continue;
+      if (type == SRC_WIN || type == DISASSEM_WIN)
 	{
-	  if (type == SRC_WIN || type == DISASSEM_WIN)
-	    {
-	      touchwin (list[type]->detail.source_info.execution_info->handle);
-	      tui_refresh_win (list[type]->detail.source_info.execution_info);
-	    }
-	  touchwin (list[type]->generic.handle);
-	  tui_refresh_win (&list[type]->generic);
+	  tui_refresh_wi (list[type]->detail.source_info.execution_info);
 	}
+      tui_refresh_wi (&list[type]->generic);
     }
-  if (locator->is_visible)
-    {
-      touchwin (locator->handle);
-      tui_refresh_win (locator);
-    }
+
+  tui_refresh_wi (tui_locator_win_info_ptr ());
 }
 
 
Index: src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c
diff -u src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c:1.1.1.7 src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c:1.2
--- src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c:1.1.1.7	Tue Nov 28 13:18:30 2017
+++ src/external/gpl3/gdb/dist/gdb/tui/tui-winsource.c	Sun Dec 17 12:49:04 2017
@@ -559,6 +559,9 @@ tui_show_exec_info_content (struct tui_w
     = win_info->detail.source_info.execution_info;
   int cur_line;
 
+  if (exec_info->handle == NULL)
+    return;
+
   werase (exec_info->handle);
   tui_refresh_win (exec_info);
   for (cur_line = 1; (cur_line <= exec_info->content_size); cur_line++)
@@ -578,6 +581,9 @@ tui_erase_exec_info_content (struct tui_
   struct tui_gen_win_info *exec_info
     = win_info->detail.source_info.execution_info;
 
+  if (exec_info->handle == NULL)
+    return;
+
   werase (exec_info->handle);
   tui_refresh_win (exec_info);
 }

Reply via email to