diff --git a/kitty/file_transmission.py b/kitty/file_transmission.py index c734293e1..d8a0f5e1f 100644 --- a/kitty/file_transmission.py +++ b/kitty/file_transmission.py @@ -438,6 +438,9 @@ class FileTransmission: except Exception as e: log_error(f'Failed to parse file transmission command with error: {e}') return + if not cmd.id: + log_error('File transmission command without id received, ignoring') + return if cmd.action is Action.cancel: if cmd.id in self.active_receives: self.handle_receive_cmd(cmd) diff --git a/kitty_tests/file_transmission.py b/kitty_tests/file_transmission.py index deadbeeeb..25f4ab421 100644 --- a/kitty_tests/file_transmission.py +++ b/kitty_tests/file_transmission.py @@ -21,7 +21,7 @@ from kitty.file_transmission import ( from . import BaseTest -def response(id='', msg='', file_id='', name='', action='status', status='', size=-1): +def response(id='test', msg='', file_id='', name='', action='status', status='', size=-1): ans = {'action': 'status'} if id: ans['id'] = id @@ -43,6 +43,8 @@ def names_in(path): def serialized_cmd(**fields) -> str: + if 'id' not in fields: + fields['id'] = 'test' for k, A in (('action', Action), ('ftype', FileType), ('ttype', TransmissionType), ('compression', Compression)): if k in fields: fields[k] = A[fields[k]] @@ -93,14 +95,14 @@ class TestFileTransmission(BaseTest): ft = FileTransmission() dest = os.path.join(self.tdir, '1.bin') ft.handle_serialized_command(serialized_cmd(action='send', quiet=quiet)) - self.assertIn('', ft.active_receives) + self.assertIn('test', ft.active_receives) self.ae(ft.test_responses, [] if quiet else [response(status='OK')]) ft.handle_serialized_command(serialized_cmd(action='file', name=dest)) - self.assertPathEqual(ft.active_file().name, dest) - self.assertIsNone(ft.active_file().actual_file) + self.assertPathEqual(ft.active_file('test').name, dest) + self.assertIsNone(ft.active_file('test').actual_file) self.ae(ft.test_responses, [] if quiet else [response(status='OK'), response(status='STARTED', name=dest)]) ft.handle_serialized_command(serialized_cmd(action='data', data='abcd')) - self.assertPathEqual(ft.active_file().name, dest) + self.assertPathEqual(ft.active_file('test').name, dest) ft.handle_serialized_command(serialized_cmd(action='end_data', data='123')) self.ae(ft.test_responses, [] if quiet else [response(status='OK'), response(status='STARTED', name=dest), response(status='OK', name=dest)]) self.assertTrue(ft.active_receives) @@ -114,7 +116,7 @@ class TestFileTransmission(BaseTest): ft.handle_serialized_command(serialized_cmd(action='send')) self.ae(ft.test_responses, [response(status='OK')]) ft.handle_serialized_command(serialized_cmd(action='file', name=dest)) - self.assertPathEqual(ft.active_file().name, dest) + self.assertPathEqual(ft.active_file('test').name, dest) ft.handle_serialized_command(serialized_cmd(action='data', data='abcd')) self.assertTrue(os.path.exists(dest)) ft.handle_serialized_command(serialized_cmd(action='cancel')) @@ -126,7 +128,7 @@ class TestFileTransmission(BaseTest): ft.handle_serialized_command(serialized_cmd(action='send')) self.ae(ft.test_responses, [response(status='OK')]) ft.handle_serialized_command(serialized_cmd(action='file', name=dest, compression='zlib')) - self.assertPathEqual(ft.active_file().name, dest) + self.assertPathEqual(ft.active_file('test').name, dest) odata = b'abcd' * 1024 + b'xyz' c = zlib.compressobj() ft.handle_serialized_command(serialized_cmd(action='data', data=c.compress(odata)))