Here's a patch that addresses it. You may want to do it differently though, as subtracting from the write index is a little weird, but I couldn't see how else to do it since we need to determine padding length from the first block.
-Lucas Index: transport.c =================================================================== RCS file: /cvsroot/libssh2/libssh2/src/transport.c,v retrieving revision 1.2 diff -u -8 -p -r1.2 transport.c --- transport.c 2 Feb 2007 23:23:37 -0000 1.2 +++ transport.c 13 Feb 2007 23:45:59 -0000 @@ -432,16 +432,19 @@ libssh2pack_t libssh2_packet_read(LIBSSH } else { /* unencrypted data should not be decrypted at all */ numdecrypt = 0; } /* if there are bytes to decrypt, do that */ if(numdecrypt > 0) { + /* We can only decrypt a multiple of the blocksize */ + numdecrypt -= (numdecrypt % session- >remote.crypt->blocksize); + /* now decrypt the lot */ rc = decrypt(session, &p->buf[p->readidx], p->wptr, numdecrypt); if(rc != PACKET_NONE) { return rc; } /* advance the read pointer */ @@ -451,18 +454,18 @@ libssh2pack_t libssh2_packet_read(LIBSSH /* increse data_num */ p->data_num += numdecrypt; /* bytes left to take care of without decryption */ numbytes -= numdecrypt; } /* if there are bytes to copy that aren't decrypted, simply - copy them as-is to the target buffer */ - if(numbytes > 0) { + copy them as-is to the target buffer if necessary */ + if(numbytes > 0 && (!encrypted || !(p->total_num - (p- >data_num + numbytes)))) { memcpy(p->wptr, &p->buf[p->readidx], numbytes); /* advance the read pointer */ p->readidx += numbytes; /* advance write pointer */ p->wptr += numbytes; /* increse data_num */ p->data_num += numbytes; On Feb 13, 2007, at 2:52 PM, Daniel Stenberg wrote: > On Tue, 13 Feb 2007, Lucas Newman wrote: > >> This loop will process 1440 bytes of data that we passed in, and >> then 8 bytes are left in the buffer. However, we didn't outside of >> this function we assumed that all 1448 bytes were processed and >> copied into the decrypted packet buffer. >> >> Back at where decrypt was called, we increment the write pointer >> the entire 1448 bytes of numdecrypt, so now those 8 unprocessed >> bytes are effectively skipped. > > Thanks for being gentle with me, and now I clearly see your point. > I'll try to address this flaw within soon if you haven't. ------------------------------------------------------------------------- Using Tomcat but need to do more? Need to support web services, security? Get stuff done quickly with pre-integrated technology to make your job easier. Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 _______________________________________________ libssh2-devel mailing list libssh2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/libssh2-devel