Segmentation fault on XpmCreateImageFromData(3)
Matthieu Herrb
matthieu at herrb.eu
Thu Mar 25 17:28:34 UTC 2021
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.
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
More information about the xorg
mailing list