xserver: Branch 'master'

Adam Jackson ajax at kemper.freedesktop.org
Thu Oct 6 19:01:10 UTC 2016


 dix/resource.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

New commits:
commit 97a8353ec1192d8d3bd2ebb99e5687cb91427e09
Author: Peter Harris <pharris at opentext.com>
Date:   Thu Sep 29 11:17:48 2016 -0400

    Fix id in error when resource does not exist
    
    Always set client->errorValue before returning an error.
    
    Test program:
    
    int main(int argc, char *argv[]) {
        int screen = 0;
        xcb_connection_t *c = xcb_connect(NULL, &screen);
        if (!c) {
            printf("Cannot connect\n");
            return 1;
        }
    
        xcb_void_cookie_t tok = xcb_free_gc_checked(c, BAD_VALUE);
        xcb_g_context_error_t *err = (xcb_g_context_error_t *)xcb_request_check(c, tok);
        if (!err) {
            printf("Unexpected request success\n");
            return 1;
        }
        if (err->bad_value != BAD_VALUE) {
            printf("Error: Got 0x%X, expected 0x%X\n", err->bad_value, BAD_VALUE);
            return 1;
        }
        printf("Success! Got expected bad value of 0x%X\n", BAD_VALUE);
        return 0;
    }
    
    Reviewed-by: Adam Jackson <ajax at redhat.com>
    Signed-off-by: Peter Harris <pharris at opentext.com>

diff --git a/dix/resource.c b/dix/resource.c
index ad71b24..68efd24 100644
--- a/dix/resource.c
+++ b/dix/resource.c
@@ -1220,11 +1220,13 @@ dixLookupResourceByType(void **result, XID id, RESTYPE rtype,
             if (res->id == id && res->type == rtype)
                 break;
     }
+    if (client) {
+        client->errorValue = id;
+    }
     if (!res)
         return resourceTypes[rtype & TypeMask].errorValue;
 
     if (client) {
-        client->errorValue = id;
         cid = XaceHook(XACE_RESOURCE_ACCESS, client, id, res->type,
                        res->value, RT_NONE, NULL, mode);
         if (cid == BadValue)
@@ -1253,11 +1255,13 @@ dixLookupResourceByClass(void **result, XID id, RESTYPE rclass,
             if (res->id == id && (res->type & rclass))
                 break;
     }
+    if (client) {
+        client->errorValue = id;
+    }
     if (!res)
         return BadValue;
 
     if (client) {
-        client->errorValue = id;
         cid = XaceHook(XACE_RESOURCE_ACCESS, client, id, res->type,
                        res->value, RT_NONE, NULL, mode);
         if (cid != Success)


More information about the xorg-commit mailing list