summaryrefslogtreecommitdiffhomepage
path: root/tests
diff options
context:
space:
mode:
authorJeff Forcier <jeff@bitprophet.org>2023-12-17 17:13:53 -0500
committerJeff Forcier <jeff@bitprophet.org>2023-12-17 17:42:11 -0500
commit96db1e2be856eac66631761bae41167a1ebd2b4e (patch)
tree50013470bd5a207af717bd901e63e15277a813ad /tests
parent58785d29c47570fa700e096d16b9a0d3a6069048 (diff)
Raise exception when sequence numbers rollover during initial kex
Diffstat (limited to 'tests')
-rw-r--r--tests/test_transport.py32
1 files changed, 32 insertions, 0 deletions
diff --git a/tests/test_transport.py b/tests/test_transport.py
index f9bb89db..ecf0a184 100644
--- a/tests/test_transport.py
+++ b/tests/test_transport.py
@@ -28,6 +28,7 @@ import socket
import time
import threading
import random
+import sys
import unittest
from unittest.mock import Mock
@@ -1368,3 +1369,34 @@ class TestStrictKex:
assert tc.packetizer._Packetizer__sequence_number_out != 0
assert ts.packetizer._Packetizer__sequence_number_in != 0
assert ts.packetizer._Packetizer__sequence_number_out != 0
+
+ def test_sequence_number_rollover_detected(self):
+ class RolloverTransport(Transport):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ # Induce an about-to-rollover seqno, such that it rolls over
+ # during initial kex.
+ setattr(
+ self.packetizer,
+ f"_Packetizer__sequence_number_in",
+ sys.maxsize,
+ )
+ setattr(
+ self.packetizer,
+ f"_Packetizer__sequence_number_out",
+ sys.maxsize,
+ )
+
+ with raises(
+ SSHException,
+ match=r"Sequence number rolled over during initial kex!",
+ ):
+ with server(
+ client_init=dict(
+ # Disable strict kex - this should happen always
+ strict_kex=False,
+ ),
+ # Transport which tickles its packetizer seqno's
+ transport_factory=RolloverTransport,
+ ):
+ pass # kexinit happens at connect...