]> asedeno.scripts.mit.edu Git - PuTTY.git/commitdiff
Fix an error I introduced into SSH packet logging in r5642: some outgoing
authorJacob Nevins <jacobn@chiark.greenend.org.uk>
Wed, 26 Oct 2005 22:18:11 +0000 (22:18 +0000)
committerJacob Nevins <jacobn@chiark.greenend.org.uk>
Wed, 26 Oct 2005 22:18:11 +0000 (22:18 +0000)
packets over about 256 bytes would be logged with 12 bytes of preceding
garbage. (But the rest of the packet was logged in its entirety. This
holds for packets where (int(len/256)%2)==1, with an appropriate fudge
factor applied to `len'.) Ahem.

[originally from svn r6429]
[r5642 == c09d885b2783906a4427410da7a9cbe3cd6abfd5]

ssh.c

diff --git a/ssh.c b/ssh.c
index 72536c873207e104f5a4fdd9fe63bc3316b1b213..0738b309f000e1fd7ba48d50c77e0d0de44229ba 100644 (file)
--- a/ssh.c
+++ b/ssh.c
@@ -1587,7 +1587,7 @@ static void ssh_pkt_ensure(struct Packet *pkt, int length)
 {
     if (pkt->maxlen < length) {
        unsigned char *body = pkt->body;
-       int offset = body ? pkt->data - body : 0;
+       int offset = body ? body - pkt->data : 0;
        pkt->maxlen = length + 256;
        pkt->data = sresize(pkt->data, pkt->maxlen + APIEXTRA, unsigned char);
        if (body) pkt->body = pkt->data + offset;
@@ -1697,10 +1697,10 @@ static struct Packet *ssh1_pkt_init(int pkt_type)
 static struct Packet *ssh2_pkt_init(int pkt_type)
 {
     struct Packet *pkt = ssh_new_packet();
-    pkt->length = 5;
+    pkt->length = 5; /* space for packet length + padding length */
     pkt->forcepad = 0;
     ssh_pkt_addbyte(pkt, (unsigned char) pkt_type);
-    pkt->body = pkt->data + pkt->length;
+    pkt->body = pkt->data + pkt->length; /* after packet type */
     return pkt;
 }