diff options
author | Luc Verhaegen <libv@skynet.be> | 2011-08-23 15:19:59 -0700 |
---|---|---|
committer | Aaron Plattner <aplattner@nvidia.com> | 2011-10-18 12:04:47 -0700 |
commit | 9b26e6bc8d2cdf5bac3025796855ccf05972358f (patch) | |
tree | 7d2d6dcd1d84228776f926fe60a17e7b9960e5fd /randr/rrproperty.c | |
parent | c8413362049cee8c30e0a9d67f78f9ebefe8e71f (diff) |
randr: stop clients from deleting immutable output properties
Immutable in randr means that clients are not able to alter the
property itself, they are only allowed to alter the property value.
This logically means that the property then should not be deleted
by the client either.
Signed-off-by: Luc Verhaegen <libv@skynet.be>
Reviewed-by: Rami Ylimäki <rami.ylimaki@vincit.fi>
Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Diffstat (limited to 'randr/rrproperty.c')
-rw-r--r-- | randr/rrproperty.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/randr/rrproperty.c b/randr/rrproperty.c index 6ed24d3aa..d0a90203b 100644 --- a/randr/rrproperty.c +++ b/randr/rrproperty.c @@ -549,18 +549,31 @@ int ProcRRDeleteOutputProperty (ClientPtr client) { REQUEST(xRRDeleteOutputPropertyReq); - RROutputPtr output; - + RROutputPtr output; + RRPropertyPtr prop; + REQUEST_SIZE_MATCH(xRRDeleteOutputPropertyReq); UpdateCurrentTime(); VERIFY_RR_OUTPUT(stuff->output, output, DixReadAccess); - + if (!ValidAtom(stuff->property)) { client->errorValue = stuff->property; return BadAtom; } + prop = RRQueryOutputProperty(output, stuff->property); + if (!prop) + { + client->errorValue = stuff->property; + return BadName; + } + + if (prop->immutable) + { + client->errorValue = stuff->property; + return BadAccess; + } RRDeleteOutputProperty(output, stuff->property); return Success; |