Re: [PATCH libXi] XListInputDevices: Do not modify ndevices in case of an error

2016-10-16 Thread Peter Hutterer
On Sat, Oct 15, 2016 at 02:06:42PM +0200, Niels Ole Salscheider wrote:
> Output parameters must only be modified if there is no error.
> 
> Signed-off-by: Niels Ole Salscheider 

see this patch here please
https://patchwork.freedesktop.org/patch/115414/

Cheers,
   Peter

> ---
>  src/XListDev.c | 17 +
>  1 file changed, 9 insertions(+), 8 deletions(-)
> 
> diff --git a/src/XListDev.c b/src/XListDev.c
> index b2bad72..f4e37ba 100644
> --- a/src/XListDev.c
> +++ b/src/XListDev.c
> @@ -202,8 +202,8 @@ XListInputDevices(
>   return (XDeviceInfo *) NULL;
>  }
>  
> -if ((*ndevices = rep.ndevices)) {/* at least 1 input device */
> - size = *ndevices * sizeof(XDeviceInfo);
> +if (rep.ndevices) {  /* at least 1 input device */
> + size = rep.ndevices * sizeof(XDeviceInfo);
>   if (rep.length < (INT_MAX >> 2)) {
>   rlen = rep.length << 2; /* multiply length by 4*/
>   slist = list = Xmalloc(rlen);
> @@ -216,17 +216,17 @@ XListInputDevices(
>   }
>   _XRead(dpy, (char *)list, rlen);
>  
> - any = (xAnyClassPtr) ((char *)list + (*ndevices * sizeof(xDeviceInfo)));
> + any = (xAnyClassPtr) ((char *)list + (rep.ndevices * 
> sizeof(xDeviceInfo)));
>   sav_any = any;
>   end = (char *)list + rlen;
> - for (i = 0; i < *ndevices; i++, list++) {
> + for (i = 0; i < rep.ndevices; i++, list++) {
>  if(SizeClassInfo(, end - (char *)any, 
> (int)list->num_classes, ))
>  goto out;
>  size += s;
>   }
>  
>   Nptr = ((unsigned char *)list) + rlen;
> - for (i = 0, nptr = (unsigned char *)any; i < *ndevices; i++) {
> + for (i = 0, nptr = (unsigned char *)any; i < rep.ndevices; i++) {
>   if (nptr >= Nptr)
>   goto out;
>   size += *nptr + 1;
> @@ -242,10 +242,10 @@ XListInputDevices(
>   }
>   sclist = clist;
>   Any = (XAnyClassPtr) ((char *)clist +
> -   (*ndevices * sizeof(XDeviceInfo)));
> +   (rep.ndevices * sizeof(XDeviceInfo)));
>   list = slist;
>   any = sav_any;
> - for (i = 0; i < *ndevices; i++, list++, clist++) {
> + for (i = 0; i < rep.ndevices; i++, list++, clist++) {
>   clist->type = list->type;
>   clist->id = list->id;
>   clist->use = list->use;
> @@ -258,7 +258,7 @@ XListInputDevices(
>   clist = sclist;
>   nptr = (unsigned char *)any;
>   Nptr = (unsigned char *)Any;
> - for (i = 0; i < *ndevices; i++, clist++) {
> + for (i = 0; i < rep.ndevices; i++, clist++) {
>   clist->name = (char *)Nptr;
>   memcpy(Nptr, nptr + 1, *nptr);
>   Nptr += (*nptr);
> @@ -266,6 +266,7 @@ XListInputDevices(
>   nptr += (*nptr + 1);
>   }
>  }
> +*ndevices = rep.ndevices;
>  
>out:
>  XFree((char *)slist);
> -- 
> 2.10.1
> 
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

[PATCH libXi] XListInputDevices: Do not modify ndevices in case of an error

2016-10-15 Thread Niels Ole Salscheider
Output parameters must only be modified if there is no error.

Signed-off-by: Niels Ole Salscheider 
---
 src/XListDev.c | 17 +
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/XListDev.c b/src/XListDev.c
index b2bad72..f4e37ba 100644
--- a/src/XListDev.c
+++ b/src/XListDev.c
@@ -202,8 +202,8 @@ XListInputDevices(
return (XDeviceInfo *) NULL;
 }
 
-if ((*ndevices = rep.ndevices)) {  /* at least 1 input device */
-   size = *ndevices * sizeof(XDeviceInfo);
+if (rep.ndevices) {/* at least 1 input device */
+   size = rep.ndevices * sizeof(XDeviceInfo);
if (rep.length < (INT_MAX >> 2)) {
rlen = rep.length << 2; /* multiply length by 4*/
slist = list = Xmalloc(rlen);
@@ -216,17 +216,17 @@ XListInputDevices(
}
_XRead(dpy, (char *)list, rlen);
 
-   any = (xAnyClassPtr) ((char *)list + (*ndevices * sizeof(xDeviceInfo)));
+   any = (xAnyClassPtr) ((char *)list + (rep.ndevices * 
sizeof(xDeviceInfo)));
sav_any = any;
end = (char *)list + rlen;
-   for (i = 0; i < *ndevices; i++, list++) {
+   for (i = 0; i < rep.ndevices; i++, list++) {
 if(SizeClassInfo(, end - (char *)any, (int)list->num_classes, 
))
 goto out;
 size += s;
}
 
Nptr = ((unsigned char *)list) + rlen;
-   for (i = 0, nptr = (unsigned char *)any; i < *ndevices; i++) {
+   for (i = 0, nptr = (unsigned char *)any; i < rep.ndevices; i++) {
if (nptr >= Nptr)
goto out;
size += *nptr + 1;
@@ -242,10 +242,10 @@ XListInputDevices(
}
sclist = clist;
Any = (XAnyClassPtr) ((char *)clist +
- (*ndevices * sizeof(XDeviceInfo)));
+ (rep.ndevices * sizeof(XDeviceInfo)));
list = slist;
any = sav_any;
-   for (i = 0; i < *ndevices; i++, list++, clist++) {
+   for (i = 0; i < rep.ndevices; i++, list++, clist++) {
clist->type = list->type;
clist->id = list->id;
clist->use = list->use;
@@ -258,7 +258,7 @@ XListInputDevices(
clist = sclist;
nptr = (unsigned char *)any;
Nptr = (unsigned char *)Any;
-   for (i = 0; i < *ndevices; i++, clist++) {
+   for (i = 0; i < rep.ndevices; i++, clist++) {
clist->name = (char *)Nptr;
memcpy(Nptr, nptr + 1, *nptr);
Nptr += (*nptr);
@@ -266,6 +266,7 @@ XListInputDevices(
nptr += (*nptr + 1);
}
 }
+*ndevices = rep.ndevices;
 
   out:
 XFree((char *)slist);
-- 
2.10.1

___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel