[tor-commits] [stem/master] VPADDING cells can now be constructed correctly with size 0

atagar at torproject.org atagar at torproject.org
Sun Jun 17 00:23:10 UTC 2018


commit e70dcbda95d4e4cc5c87f1b71d2980d4c031330d
Author: Dave Rolek <dmr-x at 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):





More information about the tor-commits mailing list