shithub: riscv

Download patch

ref: 16784a2e45937c6d4df5fe21c0838f8a7dfeb0a7
parent: 5254e41f6bad708fb3d2cc4e98a416d3efa36eb2
author: cinap_lenrek <[email protected]>
date: Sat Jan 11 19:07:27 EST 2020

devdraw: fix topnwindows() panic when images are not windows (thanks aiju)

Crashes drawterm and native:

#include <u.h>
#include <libc.h>
#include <draw.h>

void
main(int argc, char **argv)
{
 	initdraw(nil, nil, nil);

 	Image *a[] = {screen, display->black};

 	topnwindows(a, nelem(a));
 	flushimage(display, 1);
}

--- a/sys/src/9/port/devdraw.c
+++ b/sys/src/9/port/devdraw.c
@@ -2022,13 +2022,13 @@
 				free(lp);
 				nexterror();
 			}
-			for(j=0; j<nw; j++)
+			for(j=0; j<nw; j++){
 				lp[j] = drawimage(client, a+1+1+2+j*4);
-			if(lp[0]->layer == 0)
-				error("images are not windows");
-			for(j=1; j<nw; j++)
+				if(lp[j]->layer == 0)
+					error("images are not windows");
 				if(lp[j]->layer->screen != lp[0]->layer->screen)
 					error("images not on same screen");
+			}
 			if(a[1])
 				memltofrontn(lp, nw);
 			else