From 24685cf1a3987a72310b0160b102fef615359731 Mon Sep 17 00:00:00 2001 From: Kees Cook Date: Sat, 9 Jul 2011 13:05:17 -0700 Subject: xhost: check return value of X{Add,Remove}Host In the ServerInterpreted case, XAddHost and XRemoveHost are capable of failing when they lack request buffer memory. Notice this situation, and report correctly. Signed-off-by: Kees Cook Reviewed-by: Alan Coopersmith Signed-off-by: Julien Cristau --- xhost.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/xhost.c b/xhost.c index c7faeff..49d4690 100644 --- a/xhost.c +++ b/xhost.c @@ -450,7 +450,7 @@ change_host(Display *dpy, char *name, Bool add) if (family == FamilyServerInterpreted) { XServerInterpretedAddress siaddr; - int namelen; + int namelen, rc; cp = strchr(name, ':'); if (cp == NULL || cp == name) { @@ -472,11 +472,14 @@ change_host(Display *dpy, char *name, Bool add) siaddr.value = siaddr.type + siaddr.typelength + 1; siaddr.valuelength = namelen - (siaddr.typelength + 1); if (add) - XAddHost(dpy, &ha); + rc = XAddHost(dpy, &ha); else - XRemoveHost(dpy, &ha); + rc = XRemoveHost(dpy, &ha); free(siaddr.type); - printf( "%s %s\n", name, add ? add_msg : remove_msg); + printf( "%s %s%s\n", name, rc == 1 ? "" : "failed when ", + add ? add_msg : remove_msg); + if (rc != 1) + return 0; return 1; } -- cgit v1.2.3