Package: netris
Version: 0.52-8
Severity: normal
Tags: patch

Valgrind reports a memory leak in netris:

20 bytes in 1 blocks are definitely lost in loss record 5 of 43
   at 0x4023D47: realloc (vg_replace_malloc.c:476)
   by 0x804AF7D: GetTermcapInfo (curses.c:152)
   by 0x804AD15: InitScreens (curses.c:68)
   by 0x804A84C: main (game.c:428)

Fixed by removing hardly needed realloc. I added also an additional check for 
malloc returning NULL.

-- System Information:
Debian Release: squeeze/sid
  APT prefers testing
  APT policy: (500, 'testing')
Architecture: i386 (i686)

Kernel: Linux 2.6.32-5-686 (SMP w/2 CPU cores)

Versions of packages netris depends on:
ii  libc6                     2.11.2-2       Embedded GNU C Library: Shared lib
ii  libncurses5               5.7+20100313-2 shared libraries for terminal hand

netris recommends no packages.

netris suggests no packages.

-- no debconf information
diff -rU 10 netris-0.52//curses.c netris-0.52-fixes//curses.c
--- netris-0.52//curses.c	2003-08-13 03:33:02.000000000 +0200
+++ netris-0.52-fixes//curses.c	2010-07-29 16:42:07.000000000 +0200
@@ -127,36 +127,35 @@
 	int bufSize = 10240;
 
 	if (!(term = getenv("TERM")))
 		return;
 	if (tgetent(scratch, term) == 1) {
 		/*
 		 * Make the buffer HUGE, since tgetstr is unsafe.
 		 * Allocate it on the heap too.
 		 */
 		data = buf = malloc(bufSize);
+		if (buf == NULL)
+			fatal("memory allocation error");
 
 		/*
 		 * There is no standard include file for tgetstr, no prototype
 		 * definitions.  I like casting better than using my own prototypes
 		 * because if I guess the prototype, I might be wrong, especially
 		 * with regards to "const".
 		 */
 		term_vi = (char *)tgetstr("vi", &data);
 		term_ve = (char *)tgetstr("ve", &data);
 
 		/* Okay, so I'm paranoid; I just don't like unsafe routines */
 		if (data > buf + bufSize)
 			fatal("tgetstr overflow, you must have a very sick termcap");
-
-		/* Trim off the unused portion of buffer */
-		buf = realloc(buf, data - buf);
 	}
 
 	/*
 	 * If that fails, use hardcoded vt220 codes.
 	 * They don't seem to do anything bad on vt100's, so
 	 * we'll try them just in case they work.
 	 */
 	if (!term_vi || !term_ve) {
 		static char *vts[] = {
 				"vt100", "vt101", "vt102",

Reply via email to