randr: fix RRGetCrtcTransform reply length, part 2

Mixed up reply vs request. Obviously, the size substracted from reply
struct's one has to be the one of the generic reply, not generic requst :o

Background: the meaning of the length field isn't entirely intuitive.

a) the size is in 4-byte units, instead of bytes (therefore passing through
   bytes_to_int32() call)
b) it's not the total packet size, but only the *extra* payload size, ergo:
   how much is the packet longer than a xGenericReply = 8 units = 32 bytes.
   (min. packet size is 32 bytes -> length = 0)

In order to prevent those kind of coding errors ever happening again, it might
be a good idea putting that into a generic macro.

Fixes: c6f1b8a735
Fixes: 0ca5aaba50
Issue: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1797
Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1845>
This commit is contained in:
Enrico Weigelt, metux IT consult 2025-02-27 12:20:52 +01:00 committed by Marge Bot
parent fe156104cf
commit 53876f1ef1

View File

@ -1831,7 +1831,7 @@ ProcRRGetCrtcTransform(ClientPtr client)
xRRGetCrtcTransformReply rep = { xRRGetCrtcTransformReply rep = {
.type = X_Reply, .type = X_Reply,
.sequenceNumber = client->sequence, .sequenceNumber = client->sequence,
.length = bytes_to_int32(sizeof(xRRGetCrtcTransformReply) - sizeof(xReq) + nextra), .length = bytes_to_int32(sizeof(xRRGetCrtcTransformReply) - sizeof(xGenericReply) + nextra),
.hasTransforms = crtc->transforms, .hasTransforms = crtc->transforms,
}; };