From: <hep...@us...> - 2011-02-11 03:53:33
|
Revision: 1263 http://qterm.svn.sourceforge.net/qterm/?rev=1263&view=rev Author: hephooey Date: 2011-02-11 03:53:22 +0000 (Fri, 11 Feb 2011) Log Message: ----------- Correctly handle incomplete packet in SSH2. Modified Paths: -------------- trunk/qterm-qt4/src/ssh/packet.cpp trunk/qterm-qt4/src/ssh/packet.h Modified: trunk/qterm-qt4/src/ssh/packet.cpp =================================================================== --- trunk/qterm-qt4/src/ssh/packet.cpp 2010-12-20 04:37:44 UTC (rev 1262) +++ trunk/qterm-qt4/src/ssh/packet.cpp 2011-02-11 03:53:22 UTC (rev 1263) @@ -75,7 +75,7 @@ { SSH2InBuffer::SSH2InBuffer(SocketPrivate * plainSocket, QObject * parent) : QObject(parent), m_in(), m_out(), m_buf(this), - m_sequenceNumber(0) + m_sequenceNumber(0),m_incompletePacket() { m_buf.setBuffer(&m_out); m_buf.open(QBuffer::ReadWrite); @@ -112,10 +112,14 @@ // ---------------------------------------------------------------------- QByteArray firstBlock; - if (m_transport != NULL) - firstBlock = m_transport->crypt(m_in.left(blockSize)); - else - firstBlock = m_in.left(blockSize); + if (m_incompletePacket.isEmpty()) { + if (m_transport != NULL) + firstBlock = m_transport->crypt(m_in.left(blockSize)); + else + firstBlock = m_in.left(blockSize); + } else { + firstBlock = m_incompletePacket; + } #ifdef SSH_DEBUG dumpData(firstBlock); #endif @@ -133,6 +137,7 @@ } if (length > m_in.size()) { qDebug("packet not complete"); + m_incompletePacket = firstBlock; return; } @@ -158,6 +163,7 @@ m_out = target.mid(5, length - padding - 1); m_buf.reset(); + m_incompletePacket.clear(); int flag = m_out[0]; // TODO: remove the mac; if (m_transport != NULL) Modified: trunk/qterm-qt4/src/ssh/packet.h =================================================================== --- trunk/qterm-qt4/src/ssh/packet.h 2010-12-20 04:37:44 UTC (rev 1262) +++ trunk/qterm-qt4/src/ssh/packet.h 2011-02-11 03:53:22 UTC (rev 1263) @@ -60,6 +60,7 @@ SocketPrivate * m_socket; SSH2Transport * m_transport; uint32_t m_sequenceNumber; + QByteArray m_incompletePacket; }; class SSH1InBuffer : public QObject This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |