<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">diff --git a/t/03-packet.t b/t/03-packet.t
index 1cea07e..f1ddbc7 100644
--- a/t/03-packet.t
+++ b/t/03-packet.t
@@ -30,6 +30,15 @@ my $fh = do { local *FH; *FH };
 tie $fh, 'StringThing';
 $ssh-&gt;{session}{sock} = $fh;
 
+sub alarmhack (&amp;) {
+    my $cb = shift;
+    local $SIG{ALRM} = sub { };
+    alarm 1;
+    my $res = $cb-&gt;();
+    alarm 0;
+    $res;
+}
+
 {
     ## Test basic functionality: send a packet with a string...
     my $packet = Net::SSH::Perl::Packet-&gt;new( $ssh, type =&gt; SSH_CMSG_USER );
@@ -40,7 +49,7 @@ $ssh-&gt;{session}{sock} = $fh;
 
 {
     ## ... And read it back.
-    my $packet = Net::SSH::Perl::Packet-&gt;read($ssh);
+    my $packet = alarmhack { Net::SSH::Perl::Packet-&gt;read($ssh) };
     ok( $packet, 'read a packet back' );
     is( $packet-&gt;type, SSH_CMSG_USER, 'packet type is SSH_CMSG_USER' );
     is( $packet-&gt;get_str, "foo", 'get_str returns "foo"' );
@@ -50,7 +59,7 @@ $ssh-&gt;{session}{sock} = $fh;
     ## Test read_expect. Send a SUCCESS message, expect a FAILURE
     ## message. This should croak.
     Net::SSH::Perl::Packet-&gt;new( $ssh, type =&gt; SSH_SMSG_SUCCESS )-&gt;send;
-    eval { my $packet = Net::SSH::Perl::Packet-&gt;read_expect($ssh, SSH_SMSG_FAILURE) };
+    eval { my $packet = alarmhack { Net::SSH::Perl::Packet-&gt;read_expect($ssh, SSH_SMSG_FAILURE) }; };
     ok( $@, 'sending success and expecting a failure message croaks' );
 
     my $expected = sprintf "type %s, got %s", SSH_SMSG_FAILURE, SSH_SMSG_SUCCESS;
@@ -62,7 +71,7 @@ $ssh-&gt;{session}{sock} = $fh;
     ## disconnect message. It also dropped the session socket, so we
     ## need to reinstate it.
     $ssh-&gt;{session}{sock} = $fh;
-    eval { Net::SSH::Perl::Packet-&gt;read($ssh) };
+    eval { alarmhack { Net::SSH::Perl::Packet-&gt;read($ssh) }; };
     ok( $@, 'read fails after disconnect' );
     like( $@, qr/^Received disconnect.+Protocol error/,
           'error message on read after disconnect' );
@@ -79,11 +88,11 @@ $ssh-&gt;{session}{sock} = $fh;
     ## buffer: *both* packets. The internal leftover buffer should be
     ## split up based on the packet lengths.  First read reads entire
     ## buffer, grabs first packet...
-    my $packet = Net::SSH::Perl::Packet-&gt;read($ssh);
+    my $packet = alarmhack { Net::SSH::Perl::Packet-&gt;read($ssh) };
     is( $packet-&gt;type, SSH_SMSG_FAILURE, 'packet type is SSH_SMSG_FAILURE' );
 
     ## ... Second read grabs leftover buffer, grabs second packet.
-    $packet = Net::SSH::Perl::Packet-&gt;read($ssh);
+    $packet = alarmhack { Net::SSH::Perl::Packet-&gt;read($ssh) };
     is( $packet-&gt;type, SSH_CMSG_EOF, 'second packet type is SSH_CMSG_EOF' );
 }
 
</pre></body></html>