This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH] Fix some valgrind errors in the TUI


The styling series introduced some new errors in the TUI -- the series
changed how source lines are allocated, without updating
tui_set_source_content_nil.

There are several failures but a typical one looks like:

==6274== Use of uninitialised value of size 8
==6274==    at 0x4E4A095: wclrtoeol (in /usr/lib64/libncursesw.so.6.1)
==6274==    by 0x4E47617: waddch (in /usr/lib64/libncursesw.so.6.1)
==6274==    by 0x8325CB: tui_puts_internal(_win_st*, char const*, int*) (tui-io.c:393)
==6274==    by 0x82E89D: tui_file::puts(char const*) (tui-file.c:39)
==6274==    by 0x84BF5F: vfprintf_unfiltered(ui_file*, char const*, __va_list_tag*) (utils.c:2026)

This patch rewrites tui_set_source_content_nil, fixing the bug.

This was also reported as PR tui/24197.

Verified by running valgrind before and after on x86-64 Fedora 29.

gdb/ChangeLog
2019-02-12  Tom Tromey  <tom@tromey.com>

	PR tui/24197:
	* tui/tui-source.c (tui_set_source_content_nil): Rewrite.
---
 gdb/ChangeLog        |  5 +++++
 gdb/tui/tui-source.c | 21 +++++----------------
 2 files changed, 10 insertions(+), 16 deletions(-)

diff --git a/gdb/tui/tui-source.c b/gdb/tui/tui-source.c
index a7e801eba26..7cc3c00069c 100644
--- a/gdb/tui/tui-source.c
+++ b/gdb/tui/tui-source.c
@@ -253,33 +253,22 @@ tui_set_source_content_nil (struct tui_win_info *win_info,
 
       if (curr_line == (n_lines / 2 + 1))
 	{
-	  int i;
 	  int xpos;
 	  int warning_length = strlen (warning_string);
 	  char *src_line;
 
-	  src_line = element->which_element.source.line;
-
 	  if (warning_length >= ((line_width - 1) / 2))
 	    xpos = 1;
 	  else
 	    xpos = (line_width - 1) / 2 - warning_length;
 
-	  for (i = 0; i < xpos; i++)
-	    src_line[i] = ' ';
-
-	  sprintf (src_line + i, "%s", warning_string);
-
-	  for (i = xpos + warning_length; i < line_width; i++)
-	    src_line[i] = ' ';
-
-	  src_line[i] = '\n';
-
-	}			/* end if */
+	  src_line = xstrprintf ("%s%s", n_spaces (xpos), warning_string);
+	  xfree (element->which_element.source.line);
+	  element->which_element.source.line = src_line;
+	}
 
       curr_line++;
-
-    }				/* end while */
+    }
 }
 
 
-- 
2.17.2


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]