summaryrefslogtreecommitdiff
path: root/dix
diff options
context:
space:
mode:
authorPeter Harris <pharris@opentext.com>2016-09-29 11:17:48 -0400
committerAdam Jackson <ajax@redhat.com>2016-10-06 14:50:42 -0400
commit97a8353ec1192d8d3bd2ebb99e5687cb91427e09 (patch)
treeb898b300ff975197d4433c20766f4070884dcfe0 /dix
parentf4a41155479e68bf55740c1dfffafc78e4c02087 (diff)
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@redhat.com> Signed-off-by: Peter Harris <pharris@opentext.com>
Diffstat (limited to 'dix')
-rw-r--r--dix/resource.c8
1 files changed, 6 insertions, 2 deletions
diff --git a/dix/resource.c b/dix/resource.c
index ad71b2437..68efd2471 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)