commit e70dcbda95d4e4cc5c87f1b71d2980d4c031330d Author: Dave Rolek dmr-x@riseup.net Date: Sun Jun 3 21:16:36 2018 +0000
VPADDING cells can now be constructed correctly with size 0
Unclear if the previous behavior was intentional, but the spec says nothing about requiring size > 0, so making this easier.
It was already possible by specifying payload directly, so specifying size should have feature parity. --- stem/client/cell.py | 2 +- test/unit/client/cell.py | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-)
diff --git a/stem/client/cell.py b/stem/client/cell.py index ce9392b2..3c923b35 100644 --- a/stem/client/cell.py +++ b/stem/client/cell.py @@ -588,7 +588,7 @@ class VPaddingCell(Cell):
def __init__(self, size = None, payload = None): if payload is None: - payload = os.urandom(size) if size else os.urandom(random.randint(128, 1024)) + payload = os.urandom(size) if size is not None else os.urandom(random.randint(128, 1024)) elif size is not None and size != len(payload): raise ValueError('VPaddingCell constructor specified both a size of %i bytes and payload of %i bytes' % (size, len(payload)))
diff --git a/test/unit/client/cell.py b/test/unit/client/cell.py index 76fe17ea..93452195 100644 --- a/test/unit/client/cell.py +++ b/test/unit/client/cell.py @@ -60,8 +60,10 @@ NETINFO_CELLS = { b'\x00\x00\x08ZZ\xb6\x90\x04\x04\x7f\x00\x00\x01\x01\x04\x04aq\x0f\x02' + ZERO * (FIXED_PAYLOAD_LEN - 17): (datetime.datetime(2018, 1, 14, 1, 46, 56), Address('127.0.0.1'), [Address('97.113.15.2')]), }
+VPADDING_CELL_EMPTY_PACKED = b'\x00\x00\x80\x00\x00' + VPADDING_CELLS = { - b'\x00\x00\x80\x00\x00': b'', + VPADDING_CELL_EMPTY_PACKED: b'', b'\x00\x00\x80\x00\x01\x08': b'\x08', b'\x00\x00\x80\x00\x02\x08\x11': b'\x08\x11', b'\x00\x00\x80\x01\xfd' + RANDOM_PAYLOAD: RANDOM_PAYLOAD, @@ -213,6 +215,10 @@ class TestCell(unittest.TestCase): self.assertEqual(cell_bytes, VPaddingCell(payload = payload).pack(2)) self.assertEqual(payload, Cell.pop(cell_bytes, 2)[0].payload)
+ empty_constructed_cell = VPaddingCell(size = 0) + self.assertEqual(VPADDING_CELL_EMPTY_PACKED, empty_constructed_cell.pack(2)) + self.assertEqual(b'', empty_constructed_cell.payload) + self.assertRaisesRegexp(ValueError, 'VPaddingCell constructor specified both a size of 5 bytes and payload of 1 bytes', VPaddingCell, 5, '\x02')
def test_certs_cell(self):