Segmentation fault on XpmCreateImageFromData(3)

Matthieu Herrb matthieu at herrb.eu
Thu Mar 25 17:32:24 UTC 2021


On Thu, Mar 25, 2021 at 06:28:40PM +0100, Matthieu Herrb wrote:
> On Wed, Mar 24, 2021 at 08:12:34PM -0300, Phillip Bushee wrote:
> > I'm am writing a window manager which uses XpmCreateImageFromData(3)
> > to read a .xpm file containing the theme of the decoration of the
> > windows.  The program segfaults when calling this function.  I use this
> > function rather than XpmCreatePixmapFromData(3) in order for me to get
> > a pixel color from the .xpm with XGetPixel(3).
> 
> Hi,
> 
> I've the impression that this is happening because xa->valuemask is
> being used unitialized in libXpm in the way you're calling it.

PS : I forgot to mention that this is mentionned in xpm.PS.gz page 14:

  NOTE: In any case the XpmAttributes valuemask must be set to some
  valid value, at least zero, otherwise unpredictable errors can
  occur.


> 
> This seems to fix the crash for me:
> 
> diff --git shod.c shod.c
> index 5dcb450..26865d7 100644
> --- shod.c
> +++ shod.c
> @@ -467,6 +467,7 @@ settheme(void)
>  	unsigned int i, j;
>  	int status;
>  
> +	memset(&xa, 0, sizeof(xa));
>  	if (config.theme_path)  /* if the we have specified a file, read it instead */
>  		status = XpmReadFileToImage(dpy, config.theme_path, &img, NULL, &xa);
>  	else                    /* else use the default theme */
> 
> > 
> > This is the code of the window manager:
> > 	https://github.com/phillbush/shod/blob/master/shod.c
> > 
> > This is the .xpm I am reading:
> > 	https://github.com/phillbush/shod/blob/master/theme.xpm
> > 
> > This is what I get running the program under gdb.
> > 
> > 	GNU gdb 6.3
> > 	Copyright 2004 Free Software Foundation, Inc.
> > 	GDB is free software, covered by the GNU General Public License, and you
> > are
> > 	welcome to change it and/or distribute copies of it under certain
> > conditions.
> > 	Type "show copying" to see the conditions.
> > 	There is absolutely no warranty for GDB.  Type "show warranty" for details.
> > 	This GDB was configured as "amd64-unknown-openbsd6.8"...
> > 	(gdb) run
> > 	Starting program: /home/phil/proj/shod/shod
> > 	Error while reading shared library symbols:
> > 	Dwarf Error: wrong version in compilation unit header (is 4, should be 2)
> > [in module /usr/libexec/ld.so]
> > 	Error while reading shared library symbols:
> > 	Dwarf Error: wrong version in compilation unit header (is 4, should be 2)
> > [in module /usr/libexec/ld.so]
> > 	Error while reading shared library symbols:
> > 	Dwarf Error: wrong version in compilation unit header (is 4, should be 2)
> > [in module /usr/libexec/ld.so]
> > 	Error while reading shared library symbols:
> > 	Dwarf Error: wrong version in compilation unit header (is 4, should be 2)
> > [in module /usr/libexec/ld.so]
> > 	Error while reading shared library symbols:
> > 	Dwarf Error: wrong version in compilation unit header (is 4, should be 2)
> > [in module /usr/libexec/ld.so]
> > 
> > 	Program received signal SIGSEGV, Segmentation fault.
> > 	0x00007f7fffff2600 in ?? ()
> > 	(gdb) bt
> > 	#0  0x00007f7fffff2600 in ?? ()
> > 	#1  0x00000960a406b734 in SetColor () from /usr/X11R6/lib/libXpm.so.9.0
> > 	#2  0x00000960a4067ce6 in CreateColors () from /usr/X11R6/lib/libXpm.so.9.0
> > 	#3  0x00000960a4069916 in xpmParseDataAndCreate () from
> > /usr/X11R6/lib/libXpm.so.9.0
> > 	#4  0x00000960a4065437 in XpmCreateImageFromData () from
> > /usr/X11R6/lib/libXpm.so.9.0
> > 	#5  0x0000095e5e85f5db in settheme () at shod.c:473
> > 	#6  0x0000095e5e85bb58 in main () at shod.c:3465
> > 
> > I'm running OpenBSD Xenocara.
> > This is what I get running `X -version`:
> > 
> > 	X.Org X Server 1.20.8
> > 	X Protocol Version 11, Revision 0
> > 	Build Operating System: OpenBSD 6.8 amd64
> > 	Current Operating System: OpenBSD thinkbsd.my.domain 6.8 GENERIC.MP#5 amd64
> > 	Build Date: 24 November 2020  06:57:35AM
> > 
> > 	Current version of pixman: 0.38.4
> > 	        Before reporting problems, check http://wiki.x.org
> > 	        to make sure that you have the latest version.
> > 
> > _______________________________________________
> > xorg at lists.x.org: X.Org support
> > Archives: http://lists.freedesktop.org/archives/xorg
> > Info: https://lists.x.org/mailman/listinfo/xorg
> > Your subscription address: %(user_address)s
> 
> -- 
> Matthieu Herrb

-- 
Matthieu Herrb


More information about the xorg mailing list