From f9b738f77c92dc05b9da507af4a2f0cf772bad0d Mon Sep 17 00:00:00 2001 From: Oleksiy Markovets Date: Fri, 8 May 2015 16:58:41 +0300 Subject: [PATCH 1/2] removed duplicated functions in message.py --- paramiko/message.py | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/paramiko/message.py b/paramiko/message.py index b893e76d3..7df546157 100644 --- a/paramiko/message.py +++ b/paramiko/message.py @@ -141,19 +141,6 @@ def get_int(self): byte += self.get_bytes(3) return struct.unpack('>I', byte)[0] - def get_size(self): - """ - Fetch an int from the stream. - - @return: a 32-bit unsigned integer. - @rtype: int - """ - byte = self.get_bytes(1) - if byte == max_byte: - return util.inflate_long(self.get_binary()) - byte += self.get_bytes(3) - return struct.unpack('>I', byte)[0] - def get_size(self): """ Fetch an int from the stream. @@ -257,19 +244,6 @@ def add_size(self, n): self.packet.write(struct.pack('>I', n)) return self - def add_int(self, n): - """ - Add an integer to the stream. - - :param int n: integer to add - """ - if n >= Message.big_int: - self.packet.write(max_byte) - self.add_string(util.deflate_long(n)) - else: - self.packet.write(struct.pack('>I', n)) - return self - def add_int(self, n): """ Add an integer to the stream. From 62bd4080119fe84ce47f2d798dacee3dc429b5eb Mon Sep 17 00:00:00 2001 From: Oleksiy Markovets Date: Fri, 8 May 2015 17:03:41 +0300 Subject: [PATCH 2/2] removed int packaging logic which doesn't conform to RFC 4251 --- paramiko/message.py | 14 ++------------ tests/test_message.py | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 19 deletions(-) diff --git a/paramiko/message.py b/paramiko/message.py index 7df546157..8f68a5760 100644 --- a/paramiko/message.py +++ b/paramiko/message.py @@ -38,8 +38,6 @@ class Message (object): paramiko doesn't support yet. """ - big_int = long(0xff000000) - def __init__(self, content=None): """ Create a new SSH2 message. @@ -135,11 +133,7 @@ def get_int(self): :return: a 32-bit unsigned `int`. """ - byte = self.get_bytes(1) - if byte == max_byte: - return util.inflate_long(self.get_binary()) - byte += self.get_bytes(3) - return struct.unpack('>I', byte)[0] + return struct.unpack('>I', self.get_bytes(4))[0] def get_size(self): """ @@ -251,11 +245,7 @@ def add_int(self, n): @param n: integer to add @type n: int """ - if n >= Message.big_int: - self.packet.write(max_byte) - self.add_string(util.deflate_long(n)) - else: - self.packet.write(struct.pack('>I', n)) + self.packet.write(struct.pack('>I', n)) return self def add_int64(self, n): diff --git a/tests/test_message.py b/tests/test_message.py index f308c0376..bcc57abb4 100644 --- a/tests/test_message.py +++ b/tests/test_message.py @@ -30,7 +30,7 @@ class MessageTest (unittest.TestCase): __a = b'\x00\x00\x00\x17\x07\x60\xe0\x90\x00\x00\x00\x01\x71\x00\x00\x00\x05\x68\x65\x6c\x6c\x6f\x00\x00\x03\xe8' + b'x' * 1000 __b = b'\x01\x00\xf3\x00\x3f\x00\x00\x00\x10\x68\x75\x65\x79\x2c\x64\x65\x77\x65\x79\x2c\x6c\x6f\x75\x69\x65' __c = b'\x00\x00\x00\x00\x00\x00\x00\x05\x00\x00\xf5\xe4\xd3\xc2\xb1\x09\x00\x00\x00\x01\x11\x00\x00\x00\x07\x00\xf5\xe4\xd3\xc2\xb1\x09\x00\x00\x00\x06\x9a\x1b\x2c\x3d\x4e\xf7' - __d = b'\x00\x00\x00\x05\xff\x00\x00\x00\x05\x11\x22\x33\x44\x55\xff\x00\x00\x00\x0a\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03\x63\x61\x74\x00\x00\x00\x03\x61\x2c\x62' + __d = b'\x00\x00\x00\x05\x00\x00\x00\x00\x11"3D\x00\x00\x00\n\x00\xf0\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x03cat\x00\x00\x00\x03a,b' def test_1_encode(self): msg = Message() @@ -83,8 +83,13 @@ def test_2_decode(self): def test_3_add(self): msg = Message() msg.add(5) - msg.add(0x1122334455) - msg.add(0xf00000000000000000) + + import struct + self.assertRaises(struct.error, msg.add, 0x1122334455) + self.assertRaises(struct.error, msg.add, 0xf00000000000000000) + msg.add_int64(0x11223344) + self.assertRaises(struct.error, msg.add_int64, 0xf00000000000000000) + msg.add_mpint(0xf00000000000000000) msg.add(True) msg.add('cat') msg.add(['a', 'b']) @@ -93,10 +98,10 @@ def test_3_add(self): def test_4_misc(self): msg = Message(self.__d) self.assertEqual(msg.get_int(), 5) - self.assertEqual(msg.get_int(), 0x1122334455) - self.assertEqual(msg.get_int(), 0xf00000000000000000) - self.assertEqual(msg.get_so_far(), self.__d[:29]) - self.assertEqual(msg.get_remainder(), self.__d[29:]) + self.assertEqual(msg.get_int64(), 0x11223344) + self.assertEqual(msg.get_mpint(), 0xf00000000000000000) + self.assertEqual(msg.get_so_far(), self.__d[:26]) + self.assertEqual(msg.get_remainder(), self.__d[26:]) msg.rewind() self.assertEqual(msg.get_int(), 5) self.assertEqual(msg.get_so_far(), self.__d[:4])