[PATCH xserver] xfree86: fix autoConfigDevice() regression that skipped all but the first driver match

Peter Hutterer peter.hutterer at who-t.net
Tue May 9 23:37:33 UTC 2017


On Tue, May 09, 2017 at 03:08:33PM -0700, Aaron Plattner wrote:
> Commit 112d0d7d01b9 lost the initialization of the variable i in the loop to add
> secondary driver matches to the list of configs:
> 
>  @@ -398,8 +412,8 @@ autoConfigDevice(GDevPtr preconf_device)
> 
>               /* for each other driver found, copy the first screen, insert it
>                * into the list of screens and set the driver */
>  -            for (i = 1; i < num_matches; i++) {
>  -                if (!copyScreen(slp[0].screen, ptr, i, matches[i]))
>  +            while (i++ < md.nmatches) {
>  +                if (!copyScreen(slp[0].screen, ptr, i, md.matches[i]))
>                       return NULL;
>               }
> 
> This caused only the first match to be added, because an earlier loop sets i =
> md.nmatches.
> 
> Fix this by reverting the while loop back to a for loop.
> 
> Reported-by: Michel Dänzer <michel at daenzer.net>
> Reported-by: Peter Hutterer <peter.hutterer at who-t.net>
> Reported-by: Eric Anholt <eric at anholt.net>
> Cc: Adam Jackson <ajax at redhat.com>
> Fixes: 112d0d7d01b9 ("xfree86: Improved autoconfig drivers matching")
> Signed-off-by: Aaron Plattner <aplattner at nvidia.com>
> ---
> Resend: forgot to Cc the list.

works, thanks.

Tested-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
   Peter

>  hw/xfree86/common/xf86AutoConfig.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/hw/xfree86/common/xf86AutoConfig.c b/hw/xfree86/common/xf86AutoConfig.c
> index a32c108ff2de..0f4f05de99e0 100644
> --- a/hw/xfree86/common/xf86AutoConfig.c
> +++ b/hw/xfree86/common/xf86AutoConfig.c
> @@ -412,7 +412,7 @@ autoConfigDevice(GDevPtr preconf_device)
>  
>              /* for each other driver found, copy the first screen, insert it
>               * into the list of screens and set the driver */
> -            while (i++ < md.nmatches) {
> +            for (i = 1; i < md.nmatches; i++) {
>                  if (!copyScreen(slp[0].screen, ptr, i, md.matches[i]))
>                      return NULL;
>              }
> -- 
> 2.12.2
> 
> 


More information about the xorg-devel mailing list