This loop was written in a buggy style, causing a NULL driver ptr to be
passed to copyScreen(). copyScreen() only uses that to generate an
identifier string, so this is mostly harmless on systems that accept
NULL for asprintf() "%s" format. (the generated identifiers are off
by one wrt the driver names and the last one contains NULL.

For systems that don't accept NULL for '%s' this would cause a
segmentation fault when this code is used (no xorg.conf, but partial
config in xorg.conf.d for instance).

Signed-off-by: Matthieu Herrb <[email protected]>

--- 
Alan, any idea why this never triggered on Solaris (which afaik 
doesn't like NULL in "%s") ?
---
 hw/xfree86/common/xf86AutoConfig.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git hw/xfree86/common/xf86AutoConfig.c hw/xfree86/common/xf86AutoConfig.c
index e6ab900..b56b295 100644
--- hw/xfree86/common/xf86AutoConfig.c
+++ hw/xfree86/common/xf86AutoConfig.c
@@ -389,8 +389,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 */
-            i = 0;
-            while (i++ < num_matches) {
+           for (i = 0; i < num_matches; i++) {
                 if (!copyScreen(slp[0].screen, ptr, i, matches[i]))
                     return NULL;
             }
-- 
2.8.4

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to