Skip to content

Commit e60ac7f

Browse files
committed
protocol/rq: fix handling of properties
Stick to byte strings as a property value can be binary data even when using an X11 8-bits string.
1 parent 5050121 commit e60ac7f

6 files changed

Lines changed: 24 additions & 25 deletions

File tree

‎Xlib/protocol/rq.py‎

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
import types
2828

2929
# Python 2/3 compatibility.
30-
from six import byte2int, indexbytes, iterbytes, string_types
30+
from six import binary_type, byte2int, indexbytes, iterbytes
3131

3232
# Xlib modules
3333
from .. import X
@@ -650,7 +650,7 @@ def parse_binary_value(self, data, display, length, format):
650650
ret = None
651651

652652
elif format == 8:
653-
ret = (8, data[:length].decode())
653+
ret = (8, data[:length])
654654
data = data[length + ((4 - length % 4) % 4):]
655655

656656
elif format == 16:
@@ -669,8 +669,7 @@ def pack_value(self, value):
669669
if fmt not in (8, 16, 32):
670670
raise BadDataError('Invalid property data format {0}'.format(fmt))
671671

672-
if isinstance(val, string_types):
673-
val = val.encode()
672+
if isinstance(val, binary_type):
674673
size = fmt // 8
675674
vlen = len(val)
676675
if vlen % size:

‎test/gen/genprottest.py‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -908,9 +908,9 @@ def build_bin(bin):
908908

909909
request_var_defs = {
910910
'InternAtom': ('fuzzy_prop', ),
911-
'ChangeProperty': [((8, ''), ),
912-
((8, 'foo'), ),
913-
((8, 'zoom'), ),
911+
'ChangeProperty': [((8, b''), ),
912+
((8, b'foo'), ),
913+
((8, b'zoom'), ),
914914
((16, []), ),
915915
((16, [1, 2, 3]), ),
916916
((16, [1, 2, 3, 4]), ),
@@ -951,9 +951,9 @@ def build_bin(bin):
951951
reply_var_defs = {
952952
'QueryTree': (7, ),
953953
'GetAtomName': ('WM_CLASS', ),
954-
'GetProperty': [((8, ''), ),
955-
((8, 'foo'), ),
956-
((8, 'zoom'), ),
954+
'GetProperty': [((8, b''), ),
955+
((8, b'foo'), ),
956+
((8, b'zoom'), ),
957957
((16, []), ),
958958
((16, [1, 2, 3]), ),
959959
((16, [1, 2, 3, 4]), ),
@@ -980,7 +980,7 @@ def build_bin(bin):
980980
}
981981

982982
event_var_defs = {
983-
'ClientMessage': [((8, '01234567890123456789'), ),
983+
'ClientMessage': [((8, b'01234567890123456789'), ),
984984
((16, [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]), ),
985985
((32, [1, 2, 3, 4, 5]), ) ],
986986
}

‎test/test_events_be.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -726,7 +726,7 @@ class TestClientMessage(EndianTest):
726726
def setUp(self):
727727
self.evt_args_0 = {
728728
'sequence_number': 48712,
729-
'data': (8, '01234567890123456789'),
729+
'data': (8, b'01234567890123456789'),
730730
'type': 245,
731731
'client_type': 1340394836,
732732
'window': 1256861040,

‎test/test_events_le.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -546,7 +546,7 @@ class TestClientMessage(EndianTest):
546546
def setUp(self):
547547
self.evt_args_0 = {
548548
'client_type': 1554224294,
549-
'data': (8, '01234567890123456789'),
549+
'data': (8, b'01234567890123456789'),
550550
'sequence_number': 44540,
551551
'type': 140,
552552
'window': 610247893,

‎test/test_requests_be.py‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -682,7 +682,7 @@ class TestChangeProperty(EndianTest):
682682
def setUp(self):
683683
self.req_args_0 = {
684684
'mode': 0,
685-
'data': (8, ''),
685+
'data': (8, b''),
686686
'property': 2085394193,
687687
'window': 266197951,
688688
'type': 1343008022,
@@ -693,7 +693,7 @@ def setUp(self):
693693

694694
self.req_args_1 = {
695695
'mode': 2,
696-
'data': (8, 'foo'),
696+
'data': (8, b'foo'),
697697
'property': 449719979,
698698
'window': 1522118044,
699699
'type': 121096013,
@@ -705,7 +705,7 @@ def setUp(self):
705705

706706
self.req_args_2 = {
707707
'mode': 2,
708-
'data': (8, 'zoom'),
708+
'data': (8, b'zoom'),
709709
'property': 1009841498,
710710
'window': 286324270,
711711
'type': 1547457396,
@@ -964,7 +964,7 @@ def setUp(self):
964964
'\x5d\x30\x8c\xce' '\x50\x42\x12\x95'
965965

966966
self.reply_args_0 = {
967-
'value': (8, ''),
967+
'value': (8, b''),
968968
'sequence_number': 30606,
969969
'property_type': 1392423916,
970970
'bytes_after': 2046056935,
@@ -975,7 +975,7 @@ def setUp(self):
975975
'\x00\x00\x00\x00' '\x00\x00\x00\x00'
976976

977977
self.reply_args_1 = {
978-
'value': (8, 'foo'),
978+
'value': (8, b'foo'),
979979
'sequence_number': 44279,
980980
'property_type': 186441230,
981981
'bytes_after': 469299413,
@@ -987,7 +987,7 @@ def setUp(self):
987987
'\x66\x6f\x6f\x00'
988988

989989
self.reply_args_2 = {
990-
'value': (8, 'zoom'),
990+
'value': (8, b'zoom'),
991991
'sequence_number': 12674,
992992
'property_type': 1802804296,
993993
'bytes_after': 1968158856,

‎test/test_requests_le.py‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -483,7 +483,7 @@ def testUnpackReply0(self):
483483
class TestChangeProperty(EndianTest):
484484
def setUp(self):
485485
self.req_args_0 = {
486-
'data': (8, ''),
486+
'data': (8, b''),
487487
'mode': 1,
488488
'property': 933688309,
489489
'type': 974400040,
@@ -494,7 +494,7 @@ def setUp(self):
494494
b'\x08\x00\x00\x00' b'\x00\x00\x00\x00'
495495

496496
self.req_args_1 = {
497-
'data': (8, 'foo'),
497+
'data': (8, b'foo'),
498498
'mode': 2,
499499
'property': 565671953,
500500
'type': 1075033221,
@@ -506,7 +506,7 @@ def setUp(self):
506506
b'\x66\x6f\x6f\x00'
507507

508508
self.req_args_2 = {
509-
'data': (8, 'zoom'),
509+
'data': (8, b'zoom'),
510510
'mode': 0,
511511
'property': 1869432878,
512512
'type': 640951286,
@@ -688,7 +688,7 @@ def setUp(self):
688688
'bytes_after': 1567532733,
689689
'property_type': 1158159724,
690690
'sequence_number': 14082,
691-
'value': (8, ''),
691+
'value': (8, b''),
692692
}
693693
self.reply_bin_0 = b'\x01\x08\x02\x37' b'\x00\x00\x00\x00' \
694694
b'\x6c\x1d\x08\x45' b'\xbd\xa6\x6e\x5d' \
@@ -699,7 +699,7 @@ def setUp(self):
699699
'bytes_after': 2137067287,
700700
'property_type': 669450745,
701701
'sequence_number': 13387,
702-
'value': (8, 'foo'),
702+
'value': (8, b'foo'),
703703
}
704704
self.reply_bin_1 = b'\x01\x08\x4b\x34' b'\x01\x00\x00\x00' \
705705
b'\xf9\x01\xe7\x27' b'\x17\x0f\x61\x7f' \
@@ -711,7 +711,7 @@ def setUp(self):
711711
'bytes_after': 1111517270,
712712
'property_type': 940849590,
713713
'sequence_number': 42680,
714-
'value': (8, 'zoom'),
714+
'value': (8, b'zoom'),
715715
}
716716
self.reply_bin_2 = b'\x01\x08\xb8\xa6' b'\x01\x00\x00\x00' \
717717
b'\xb6\x39\x14\x38' b'\x56\x68\x40\x42' \

0 commit comments

Comments
 (0)