X-Git-Url: http://git.hungrycats.org/cgi-bin/gitweb.cgi?p=xscreensaver;a=blobdiff_plain;f=hacks%2Ffireworkx.c;h=78a4e9017c7bf08674cafe5a0d930eb4a3cabb83;hp=7f1002e60812a07a8a154d976256875f1518f52a;hb=2d04c4f22466851aedb6ed0f2919d148f726b889;hpb=bc7b7a8eb122206d239ec0e693676bcce31be1aa diff --git a/hacks/fireworkx.c b/hacks/fireworkx.c index 7f1002e6..78a4e901 100644 --- a/hacks/fireworkx.c +++ b/hacks/fireworkx.c @@ -17,6 +17,9 @@ * Support for different display color modes: * Jean-Pierre Demailly * + * Fixed array access problems by beating on it with a large hammer. + * Nicholas Miell + * */ #include @@ -48,6 +51,8 @@ static int fsc_height= 0; static int rndlife = RNDLIFE1; static int minlife = MINLIFE1; static float light_fade = 0.99; +static unsigned char *real_palaka1 = NULL; +static unsigned char *real_palaka2 = NULL; static unsigned char *palaka1=NULL; static unsigned char *palaka2=NULL; static XImage *xim=NULL; @@ -147,7 +152,7 @@ void recycle(fireshell *fs,int x,int y) void blur_best(void) { - unsigned int n; + int n; unsigned int w = fsc_width; unsigned int h = fsc_height; unsigned char *pa, *pb, *pm; @@ -232,18 +237,21 @@ void resize(Display *display, Window win) if (xim) { if (xim->data==(char *)palaka2) xim->data=NULL; XDestroyImage(xim); - if (palaka2!=palaka1) free(palaka2); - free(palaka1); + if (palaka2!=palaka1) free(real_palaka2); + free(real_palaka1); } palaka1 = NULL; palaka2 = NULL; xim = XCreateImage(display, xwa.visual, xwa.depth, ZPixmap, 0, 0, fsc_width, fsc_height, 32, 0); - palaka1 = calloc(xim->height,xim->width*4); - if(light_on) - palaka2 = calloc(xim->height,xim->width*4); - else - palaka2 = palaka1; + real_palaka1 = calloc(xim->height + 4,xim->width*4); + palaka1 = real_palaka1 + xim->width * 4 * 2; + if(light_on) { + real_palaka2 = calloc(xim->height + 4,xim->width*4); + palaka2 = real_palaka2 + xim->width * 4 * 2; + } else { + palaka2 = palaka1; + } if (depth>=24) xim->data = (char *)palaka2; else