[PATCH libXi] Set ndevices to 0 in the error case

Niels Ole Salscheider niels_ole at salscheider-online.de
Sat Oct 8 09:30:00 UTC 2016


Signed-off-by: Niels Ole Salscheider <niels_ole at salscheider-online.de>
---
 src/XListDev.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git a/src/XListDev.c b/src/XListDev.c
index d0c6bf2..d29a952 100644
--- a/src/XListDev.c
+++ b/src/XListDev.c
@@ -189,8 +189,10 @@ XListInputDevices(
     XExtDisplayInfo *info = XInput_find_display(dpy);
 
     LockDisplay(dpy);
-    if (_XiCheckExtInit(dpy, XInput_Initial_Release, info) == -1)
+    if (_XiCheckExtInit(dpy, XInput_Initial_Release, info) == -1) {
+        *ndevices = 0;
 	return ((XDeviceInfo *) NULL);
+    }
 
     GetReq(ListInputDevices, req);
     req->reqType = info->codes->major_opcode;
@@ -199,6 +201,7 @@ XListInputDevices(
     if (!_XReply(dpy, (xReply *) & rep, 0, xFalse)) {
 	UnlockDisplay(dpy);
 	SyncHandle();
+        *ndevices = 0;
 	return (XDeviceInfo *) NULL;
     }
 
@@ -212,6 +215,7 @@ XListInputDevices(
 	    _XEatDataWords(dpy, rep.length);
 	    UnlockDisplay(dpy);
 	    SyncHandle();
+            *ndevices = 0;
 	    return (XDeviceInfo *) NULL;
 	}
 	_XRead(dpy, (char *)list, rlen);
@@ -220,15 +224,19 @@ XListInputDevices(
 	sav_any = any;
 	end = (char *)list + rlen;
 	for (i = 0; i < *ndevices; i++, list++) {
-            if(SizeClassInfo(&any, end - (char *)any, (int)list->num_classes, &s))
+            if(SizeClassInfo(&any, end - (char *)any, (int)list->num_classes, &s)) {
+                *ndevices = 0;
                 goto out;
+            }
             size += s;
 	}
 
 	Nptr = ((unsigned char *)list) + rlen;
 	for (i = 0, nptr = (unsigned char *)any; i < *ndevices; i++) {
-	    if (nptr >= Nptr)
+	    if (nptr >= Nptr) {
+                *ndevices = 0;
 		goto out;
+            }
 	    size += *nptr + 1;
 	    nptr += (*nptr + 1);
 	}
@@ -238,6 +246,7 @@ XListInputDevices(
 	    XFree((char *)slist);
 	    UnlockDisplay(dpy);
 	    SyncHandle();
+            *ndevices = 0;
 	    return (XDeviceInfo *) NULL;
 	}
 	sclist = clist;
-- 
2.10.1



More information about the xorg-devel mailing list