Package: gtkterm
Version: 0.99.5-1
Severity: important
Tags: patch

It seams that there are memory leaks in the package. Set the gtkterm to
the text mode and insert some rx traffic.

-- System Information:
Debian Release: 4.0
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: amd64 (x86_64)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-4-amd64
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)

Versions of packages gtkterm depends on:
ii  libatk1.0-0                 1.12.4-3     The ATK accessibility toolkit
ii  libc6                       2.3.6.ds1-13 GNU C Library: Shared libraries
ii  libcairo2                   1.2.4-4      The Cairo 2D vector graphics libra
ii  libfontconfig1              2.4.2-1.2    generic font configuration library
ii  libglib2.0-0                2.12.4-2     The GLib library of C routines
ii  libgtk2.0-0                 2.8.20-7     The GTK+ graphical user interface 
ii  libncurses5                 5.5-5        Shared libraries for terminal hand
ii  libpango1.0-0               1.14.8-5     Layout and rendering of internatio
ii  libvte4                     1:0.12.2-5   Terminal emulator widget for GTK+ 
ii  libx11-6                    2:1.0.3-7    X11 client-side library
ii  libxcursor1                 1.1.7-4      X cursor management library
ii  libxext6                    1:1.0.1-2    X11 miscellaneous extension librar
ii  libxft2                     2.1.8.2-8    FreeType-based font drawing librar
ii  libxi6                      1:1.0.1-4    X11 Input extension library
ii  libxinerama1                1:1.0.1-4.1  X11 Xinerama extension library
ii  libxrandr2                  2:1.1.0.2-5  X11 RandR extension library
ii  libxrender1                 1:0.9.1-3    X Rendering Extension client libra

gtkterm recommends no packages.

-- no debconf information
diff -pur -x '*[^c$]' gtkterm-0.99.5.old/src/buffer.c gtkterm-0.99.5/src/buffer.c
--- gtkterm-0.99.5.old/src/buffer.c	2005-09-22 22:33:44.000000000 +0300
+++ gtkterm-0.99.5/src/buffer.c	2007-06-03 19:14:14.000000000 +0300
@@ -90,6 +90,7 @@ void put_chars(char *chars, unsigned int
   if(buffer == NULL)
     {
       i18n_printf(_("ERROR : Buffer is not initialized !\n"));
+      g_string_free(buffer_tmp,TRUE);
       return;
     }
   
@@ -119,6 +120,7 @@ void put_chars(char *chars, unsigned int
   
   if(write_func != NULL)
     write_func(characters, size);
+  g_string_free(buffer_tmp,TRUE);
 }
 
 void write_buffer(void)
diff -pur -x '*[^c$]' gtkterm-0.99.5.old/src/i18n.c gtkterm-0.99.5/src/i18n.c
--- gtkterm-0.99.5.old/src/i18n.c	2005-09-22 22:52:32.000000000 +0300
+++ gtkterm-0.99.5/src/i18n.c	2007-06-03 18:29:26.000000000 +0300
@@ -41,6 +41,7 @@ static char *iconv_from_utf8_to_locale(c
   char *buffer_ptr;
   char *string_ptr;
   char *string;
+  char *tmp;
 
   const size_t buffer_inc = 80; // Increment buffer size in 80 bytes step
   size_t buffer_size;
@@ -84,12 +85,14 @@ static char *iconv_from_utf8_to_locale(c
       buffer_size += buffer_inc;
       buffer_size_left = buffer_inc;
       old_buffer = buffer;
-      buffer = (char *) realloc(buffer, buffer_size + 1);
-      if (buffer == NULL)
+      tmp = (char *) realloc(buffer, buffer_size + 1);
+      if (tmp == NULL)
 	{
+		free(buffer);
 	  free(string);
 	  return g_strdup(fallback_string);
 	}
+      buffer = tmp;
       buffer_ptr = (buffer_ptr - old_buffer) + buffer;
     }
   }
diff -pur -x '*[^c$]' gtkterm-0.99.5.old/src/widgets.c gtkterm-0.99.5/src/widgets.c
--- gtkterm-0.99.5.old/src/widgets.c	2005-09-22 23:13:00.000000000 +0300
+++ gtkterm-0.99.5/src/widgets.c	2007-06-03 19:24:02.000000000 +0300
@@ -462,6 +462,7 @@ void put_text(gchar *string, guint size)
     }
 
   vte_terminal_feed(VTE_TERMINAL(display), buffer_tmp->str, size);
+  g_string_free(buffer_tmp,TRUE);
 }
 
 gint send_serial(gchar *string, gint len)

Reply via email to