Bug#417529: libgtk2.0-0: GDK segfaults if XineramaQueryScreens fails

Simon McVittie smcv at ianadd.pseudorandom.co.uk
Tue Apr 3 00:13:27 UTC 2007


Package: libgtk2.0-0
Version: 2.10.11-1
Severity: normal

In check_xfree_xinerama in gdk/x11/gdkscreen-x11.c, a call is made to
XineramaQueryScreens(..., &screen_x11->num_monitors). On success, this
stores a number in num_monitors, and returns a pointer to that many
XineramaScreenInfo structures.

However, on failure (in the underlying X protocol: when the "number"
member of the reply is zero), XineramaQueryScreens returns NULL and does
not touch num_monitors.  check_xfree_xinerama does not detect this condition,
tries to copy monitor geometry by dereferencing the NULL pointer (since
it thinks there are still as many monitors as there were last time, as
XineramaQueryScreens hasn't modified num_monitors), and segfaults.

This can sometimes be provoked by using the X server and i810 driver from
experimental, together with the XRandR 1.2 extension. It often seems to
happen when I go from VGA-out + laptop screen to just the laptop, but isn't
completely reproducible. I don't think I've ever seen it happen in other
mode changes. I'm going to investigate the XRandR Xinerama implementation
next - it's possible that there's a brief period of time in which no screens
exist, and the XineramaQueryScreens failure is because GDK is unlucky
enough to query it at precisely the wrong time.

This could also be considered a flaw in XineramaQueryScreens, that it
should write 0 out to num_monitors if no monitors are found. Since it
doesn't appear to come with any documentation, it's anyone's guess what
the error behaviour is meant to be.

I can understand that there's not a whole lot GDK can do about the
screen apparently disappearing from under it...

-- System Information:
Debian Release: 4.0
  APT prefers unstable
  APT policy: (500, 'unstable'), (101, 'experimental')
Architecture: i386 (i686)
Shell:  /bin/sh linked to /bin/bash
Kernel: Linux 2.6.18-4-vserver-686
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)

Versions of packages libgtk2.0-0 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  libcupsys2                1.2.7-4        Common UNIX Printing System(tm) - 
ii  libfontconfig1            2.4.2-1.2      generic font configuration library
ii  libglib2.0-0              2.12.6-2       The GLib library of C routines
ii  libgnutls13               1.4.4-3        the GNU TLS library - runtime libr
ii  libgtk2.0-common          2.10.11-1      Common files for the GTK+ graphica
ii  libjpeg62                 6b-13          The Independent JPEG Group's JPEG 
ii  libpango1.0-0             1.14.8-5       Layout and rendering of internatio
ii  libpng12-0                1.2.15~beta5-1 PNG library - runtime
ii  libtiff4                  3.8.2-7        Tag Image File Format (TIFF) libra
ii  libx11-6                  2:1.0.3-6      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  libxfixes3                1:4.0.1-5      X11 miscellaneous 'fixes' extensio
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.2.0-4      X11 RandR extension library
ii  libxrender1               1:0.9.1-3      X Rendering Extension client libra
ii  zlib1g                    1:1.2.3-13     compression library - runtime

Versions of packages libgtk2.0-0 recommends:
ii  hicolor-icon-theme            0.10-1     default fallback theme for FreeDes
ii  libgtk2.0-bin                 2.8.20-7   The programs for the GTK+ graphica

-- no debconf information





More information about the pkg-gnome-maintainers mailing list