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:
parent
ed575dc2b9
commit
fd311cb144
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user