功能:接入Linux原生光标并完善设备接入工具
This commit is contained in:
1 parent
a14f028402
commit
a47968496e
92 files changed
+3090
-22
No files matched your search
@@ -0,0 +1,63 @@
|
||||
"""Bounds/replay checks for untrusted cursor metadata before SDL allocation."""
|
||||
import base64
|
||||
import importlib.util
|
||||
import hashlib
|
||||
from pathlib import Path
|
||||
import unittest
|
||||
import tempfile
|
||||
|
||||
spec = importlib.util.spec_from_file_location(
|
||||
'native_cursor_client', Path(__file__).resolve().parents[2] /
|
||||
'terminal/native-cursor/client.py')
|
||||
client = importlib.util.module_from_spec(spec)
|
||||
spec.loader.exec_module(client)
|
||||
|
||||
|
||||
class CursorProtocolTests(unittest.TestCase):
|
||||
def state(self):
|
||||
return dict(type='cursor', version=1, lease='c'*32, seq=2, ack=0, w=2, h=2,
|
||||
hx=1, hy=1, x=100, y=100, sw=2560, sh=1440,
|
||||
rgba=base64.b64encode(bytes([255]*16)).decode())
|
||||
|
||||
def test_valid_and_hidden(self):
|
||||
for pixels in (bytes([255]*16), bytes(16)):
|
||||
s = self.state()
|
||||
s['rgba'] = base64.b64encode(pixels).decode()
|
||||
packet = client.validate(s, 'c'*32, [2560, 1440], 1)
|
||||
self.assertEqual(len(packet), 88)
|
||||
self.assertEqual(packet[64:80], pixels)
|
||||
|
||||
def test_bad_metadata(self):
|
||||
for key, value in [('version', 2), ('version', True), ('ack', -1),
|
||||
('ack', 2**63), ('lease', 'd'*32), ('type', 'ready'),
|
||||
('seq', 1), ('seq', 2**63), ('w', 0), ('w', 129),
|
||||
('h', -1), ('hx', 2), ('hy', -1), ('x', -1),
|
||||
('y', 1440), ('sw', 1920), ('w', True),
|
||||
('seq', 2.0), ('rgba', '***'), ('rgba', 'AAAA')]:
|
||||
with self.subTest(key=key, value=value):
|
||||
state = self.state()
|
||||
state[key] = value
|
||||
with self.assertRaises(ValueError):
|
||||
client.validate(state, 'c'*32, [2560, 1440], 1)
|
||||
|
||||
def test_missing_field(self):
|
||||
state = self.state()
|
||||
del state['h']
|
||||
with self.assertRaises(ValueError):
|
||||
client.validate(state, 'c'*32, [2560, 1440], 1)
|
||||
|
||||
def test_old_client_rejected_before_lease(self):
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
binary = Path(directory) / 'client'
|
||||
binary.write_bytes(b'validated client')
|
||||
expected = hashlib.sha256(binary.read_bytes()).hexdigest()
|
||||
client.verify_client(binary, expected)
|
||||
binary.write_bytes(b'old client without cursor receiver')
|
||||
with self.assertRaises(ValueError):
|
||||
client.verify_client(binary, expected)
|
||||
with self.assertRaises(ValueError):
|
||||
client.verify_client(binary, None)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in new issue
Block a user