ref: e8228856df1973edd0eaa4fdaa7c862bf9a75fcb
parent: 0a874a2b2bbbe9cf5e6396b77411376af14d0899
author: cinap_lenrek <cinap_lenrek@felloff.net>
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
--
⑨