1
0
mirror of https://github.com/golang/go synced 2024-11-24 22:10:02 -07:00

exp/draw/x11: support X11 vendors other than "The X.Org Foundation".

R=adg, ehog.hedge
CC=golang-dev
https://golang.org/cl/2385041
This commit is contained in:
Nigel Tao 2010-10-09 11:22:14 +11:00
parent ed575dc2b9
commit fd311cb144

View File

@ -489,16 +489,13 @@ func (c *conn) handshake() os.Error {
if err != nil { if err != nil {
return err return err
} }
// Read the vendor length. // Read the vendor length and round it up to a multiple of 4,
// for X11 protocol alignment reasons.
vendorLen, err := readU16LE(c.r, c.buf[0:2]) vendorLen, err := readU16LE(c.r, c.buf[0:2])
if err != nil { if err != nil {
return err return err
} }
if vendorLen != 20 { vendorLen = (vendorLen + 3) &^ 3
// For now, assume the vendor is "The X.Org Foundation". Supporting different
// vendors would require figuring out how much padding we need to read.
return os.NewError("unsupported X vendor")
}
// Read the maximum request length. // Read the maximum request length.
maxReqLen, err := readU16LE(c.r, c.buf[0:2]) maxReqLen, err := readU16LE(c.r, c.buf[0:2])
if err != nil { if err != nil {
@ -517,10 +514,13 @@ func (c *conn) handshake() os.Error {
if err != nil { if err != nil {
return err return err
} }
// Ignore some things that we don't care about (totalling 30 bytes): // Ignore some things that we don't care about (totalling 10 + vendorLen bytes):
// imageByteOrder(1), bitmapFormatBitOrder(1), bitmapFormatScanlineUnit(1) bitmapFormatScanlinePad(1), // imageByteOrder(1), bitmapFormatBitOrder(1), bitmapFormatScanlineUnit(1) bitmapFormatScanlinePad(1),
// minKeycode(1), maxKeycode(1), padding(4), vendor(20, hard-coded above). // minKeycode(1), maxKeycode(1), padding(4), vendor (vendorLen).
_, err = io.ReadFull(c.r, c.buf[0:30]) if 10+int(vendorLen) > cap(c.buf) {
return os.NewError("unsupported X vendor")
}
_, err = io.ReadFull(c.r, c.buf[0:10+int(vendorLen)])
if err != nil { if err != nil {
return err return err
} }