You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

44 lines
2.9 KiB

From e0f453603296e55ca2588b822b840d724d535893 Mon Sep 17 00:00:00 2001
From: Mamoru TASAKA <mtasaka@fedoraproject.org>
Date: Wed, 20 Jun 2018 18:21:45 +0900
Subject: [PATCH] xscreensaver-getimage: avoid substitution to NULL pointer
When user chooses not to use any image resource on "Image Manupulation"
in xscreensaver-demo, xscreensaver-getimage program tries to do
GRAB_BARS mode, then calls colorbars() function and it causes segfault
like:
#0 0x000055555556227a in minixpm_to_ximage (dpy=dpy@entry=0x555555788b10, visual=visual@entry=0x555555795dd0, colormap=colormap@entry=32, depth=depth@entry=24, transparent_color=<optimized out>, data=<optimized out>, data@entry=0x555555775e80 <logo_180_xpm>, width_ret=0x7fffffffcb30, height_ret=0x7fffffffcb34, pixels_ret=0x0, npixels_ret=0x0, mask_ret=0x7fffffffcb38) at ../../utils/minixpm.c:248
#1 0x0000555555561b93 in xscreensaver_logo (screen=screen@entry=0x55555578a1d0, visual=visual@entry=0x555555795dd0, drawable=drawable@entry=707, cmap=cmap@entry=32, background_color=<optimized out>, pixels_ret=pixels_ret@entry=0x0, npixels_ret=0x0, mask_ret=0x7fffffffccf0, big_p=1) at ../../utils/logo.c:49
#2 0x000055555555ab5f in colorbars (cmap=32, drawable=707, visual=0x555555795dd0, screen=0x55555578a1d0) at ../../driver/xscreensaver-getimage.c:319
#3 0x000055555555ab5f in get_image (screen=<optimized out>, file=<optimized out>, dir=<optimized out>, image_p=<optimized out>, video_p=<optimized out>, desk_p=<optimized out>, verbose_p=0, drawable=707, window=707) at ../../driver/xscreensaver-getimage.c:1697
#4 0x000055555555ab5f in main (argc=<optimized out>, argv=<optimized out>) at ../../driver/xscreensaver-getimage.c:1994
#5 0x00007ffff54d818b in __libc_start_main (main=0x55555555a4f0 <main>, argc=2, argv=0x7fffffffd428, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7fffffffd418)
at ../csu/libc-start.c:308
This patch avoids NULL pointer accessment, as xscreensaver 5.38 was doing
in (5.38) draw_colorbars() function.
---
driver/xscreensaver-getimage.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/driver/xscreensaver-getimage.c b/driver/xscreensaver-getimage.c
index b9715ae..6cf5c99 100644
--- a/driver/xscreensaver-getimage.c
+++ b/driver/xscreensaver-getimage.c
@@ -316,9 +316,11 @@ static void
colorbars (Screen *screen, Visual *visual, Drawable drawable, Colormap cmap)
{
Pixmap mask = 0;
+ unsigned long *pixels; /* ignored - unfreed */
+ int npixels;
Pixmap logo = xscreensaver_logo (screen, visual, drawable, cmap,
BlackPixelOfScreen (screen),
- 0, 0, &mask, True);
+ &pixels, &npixels, &mask, True);
draw_colorbars (screen, visual, drawable, cmap, 0, 0, 0, 0, logo, mask);
XFreePixmap (DisplayOfScreen (screen), logo);
XFreePixmap (DisplayOfScreen (screen), mask);
--
2.17.1