Commit Diff


commit - 3fd51250be8cd6f6ac5df5342d3b81e6ed1c01a9
commit + 148f25d3517dcdb32c566506e0cb0d6e632e4d23
blob - c1fbe5a2ab15de2a21ef65eed46c9fda52c7d029
blob + 53e9605bb96d97003d81f98926460d70060fe6ce
--- src/libdraw/alloc.c
+++ src/libdraw/alloc.c
@@ -231,6 +231,9 @@ freeimage(Image *i)
 {
 	int ret;
 
+	if(i == screen)
+		abort();
+
 	ret = _freeimage1(i);
 	free(i);
 	return ret;
blob - 2fe18d21d2dea30573833f1456713240237a8128
blob + 2357f0ef28961cd06d30730c2e60dc0a2f756a65
--- src/libdraw/init.c
+++ src/libdraw/init.c
@@ -202,8 +202,8 @@ bufimage(Display *d, int n)
 {
 	uchar *p;
 
-	if(n<0 || n>d->bufsize){
-abort();
+	if(n<0 || d == nil || n>d->bufsize){
+		abort();
 		werrstr("bad count in bufimage");
 		return 0;
 	}
blob - 72292671be56beebf3965c4d2db42c83636e2397
blob + a640e2eeeb50d568ed3d195a0a7bb603888e9177
--- src/libdraw/x11-init.c
+++ src/libdraw/x11-init.c
@@ -137,8 +137,10 @@ getwindow(Display *d, int ref)
 	Image *i;
 	Image *oi;
 
-	if(_x.destroyed)
+	if(_x.destroyed){
 		postnote(PNGROUP, getpgrp(), "hangup");
+		return -1;
+	}
 	if(xreplacescreenimage() == 0)
 		return 0;