Public bug reported:

In all repositories there is a buffer-overrun in the function
gtk_rc_add_default_file(), where if the dynamic array
gtk_rc_default_files has exactly max_default_files entries, a NULL will
be written past the allocated memory.  The resize function does not
resize the null terminated array in this case, and address sanitizer
(and valgrind) detects a memory access violation in any code leading to
this function.

The following code is in error ( from 
https://bazaar.launchpad.net/~ubuntu-branches/ubuntu/precise/gtk+2.0/precise-proposed/view/head:/gtk/gtkrc.c#L596
 )
{{{
  for (n = 0; n < max_default_files; n++) 
    {
      if (gtk_rc_default_files[n] == NULL)
        break;
    }

  if (n == max_default_files)
    {
      max_default_files += 10;
      gtk_rc_default_files = g_renew (gchar*, gtk_rc_default_files, 
max_default_files);
    }
  
  gtk_rc_default_files[n++] = g_strdup (filename);
  gtk_rc_default_files[n] = NULL;
}}}

Proposed modified implementation is as follows:
{{{
  for (n = 0; n < (max_default_files-1); n++) 
    {
      if (gtk_rc_default_files[n] == NULL)
        break;
    }

  if (n >= (max_default_files-1))
    {
      max_default_files += 10;
      gtk_rc_default_files = g_renew (gchar*, gtk_rc_default_files, 
max_default_files);
    }
  
  gtk_rc_default_files[n++] = g_strdup (filename);
  gtk_rc_default_files[n] = NULL;
}}}

This implementation should be changed in all branches:

https://bazaar.launchpad.net/~ubuntu-branches/ubuntu/trusty/gtk+2.0/trusty/view/head:/gtk/gtkrc.c#L569
https://bazaar.launchpad.net/~ubuntu-branches/ubuntu/trusty/gtk+2.0/trusty-updates/view/head:/gtk/gtkrc.c#L569
https://bazaar.launchpad.net/~ubuntu-branches/ubuntu/trusty/gtk+2.0/trusty-proposed/view/head:/gtk/gtkrc.c#L569
https://bazaar.launchpad.net/~ubuntu-branches/ubuntu/precise/gtk+2.0/precise/view/head:/gtk/gtkrc.c#L590
https://bazaar.launchpad.net/~ubuntu-branches/ubuntu/precise/gtk+2.0/precise-updates/view/head:/gtk/gtkrc.c#L596
https://bazaar.launchpad.net/~ubuntu-branches/ubuntu/precise/gtk+2.0/precise-proposed/view/head:/gtk/gtkrc.c#L596

** Affects: gtk+2.0 (Ubuntu)
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1760240

Title:
  Write past end of buffer in gtk/gtkrc.c gtk_rc_add_default_file

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/gtk+2.0/+bug/1760240/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to