mirror of
https://github.com/clearml/dropbear
synced 2025-01-31 10:57:01 +00:00
A bit of a bodge to avoid memcpy if zlib is disabled
--HG-- branch : nocircbuffer
This commit is contained in:
parent
989c5c1436
commit
579463933b
12
common-kex.c
12
common-kex.c
@ -534,8 +534,10 @@ void recv_msg_kexinit() {
|
|||||||
buf_putstring(ses.kexhashbuf,
|
buf_putstring(ses.kexhashbuf,
|
||||||
ses.transkexinit->data, ses.transkexinit->len);
|
ses.transkexinit->data, ses.transkexinit->len);
|
||||||
/* I_S, the payload of the server's SSH_MSG_KEXINIT */
|
/* I_S, the payload of the server's SSH_MSG_KEXINIT */
|
||||||
buf_setpos(ses.payload, 0);
|
buf_setpos(ses.payload, ses.payload_beginning);
|
||||||
buf_putstring(ses.kexhashbuf, ses.payload->data, ses.payload->len);
|
buf_putstring(ses.kexhashbuf,
|
||||||
|
buf_getptr(ses.payload, ses.payload->len-ses.payload->pos),
|
||||||
|
ses.payload->len-ses.payload->pos);
|
||||||
ses.requirenext = SSH_MSG_KEXDH_REPLY;
|
ses.requirenext = SSH_MSG_KEXDH_REPLY;
|
||||||
} else {
|
} else {
|
||||||
/* SERVER */
|
/* SERVER */
|
||||||
@ -549,8 +551,10 @@ void recv_msg_kexinit() {
|
|||||||
(unsigned char*)LOCAL_IDENT, local_ident_len);
|
(unsigned char*)LOCAL_IDENT, local_ident_len);
|
||||||
|
|
||||||
/* I_C, the payload of the client's SSH_MSG_KEXINIT */
|
/* I_C, the payload of the client's SSH_MSG_KEXINIT */
|
||||||
buf_setpos(ses.payload, 0);
|
buf_setpos(ses.payload, ses.payload_beginning);
|
||||||
buf_putstring(ses.kexhashbuf, ses.payload->data, ses.payload->len);
|
buf_putstring(ses.kexhashbuf,
|
||||||
|
buf_getptr(ses.payload, ses.payload->len-ses.payload->pos),
|
||||||
|
ses.payload->len-ses.payload->pos);
|
||||||
|
|
||||||
/* I_S, the payload of the server's SSH_MSG_KEXINIT */
|
/* I_S, the payload of the server's SSH_MSG_KEXINIT */
|
||||||
buf_putstring(ses.kexhashbuf,
|
buf_putstring(ses.kexhashbuf,
|
||||||
|
15
packet.c
15
packet.c
@ -314,18 +314,21 @@ void decrypt_packet() {
|
|||||||
if (is_compress_recv()) {
|
if (is_compress_recv()) {
|
||||||
/* decompress */
|
/* decompress */
|
||||||
ses.payload = buf_decompress(ses.readbuf, len);
|
ses.payload = buf_decompress(ses.readbuf, len);
|
||||||
|
buf_setpos(ses.payload, 0);
|
||||||
|
ses.payload_beginning = 0;
|
||||||
|
buf_free(ses.readbuf);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
|
ses.payload = ses.readbuf;
|
||||||
|
ses.payload_beginning = ses.payload->pos;
|
||||||
|
buf_setlen(ses.payload, ses.payload->pos + len);
|
||||||
/* copy payload */
|
/* copy payload */
|
||||||
ses.payload = buf_new(len);
|
//ses.payload = buf_new(len);
|
||||||
memcpy(ses.payload->data, buf_getptr(ses.readbuf, len), len);
|
//memcpy(ses.payload->data, buf_getptr(ses.readbuf, len), len);
|
||||||
buf_incrlen(ses.payload, len);
|
//buf_incrlen(ses.payload, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
buf_free(ses.readbuf);
|
|
||||||
ses.readbuf = NULL;
|
ses.readbuf = NULL;
|
||||||
buf_setpos(ses.payload, 0);
|
|
||||||
|
|
||||||
ses.recvseq++;
|
ses.recvseq++;
|
||||||
|
|
||||||
|
@ -127,6 +127,7 @@ struct sshsession {
|
|||||||
struct Queue writequeue; /* A queue of encrypted packets to send */
|
struct Queue writequeue; /* A queue of encrypted packets to send */
|
||||||
buffer *readbuf; /* From the wire, decrypted in-place */
|
buffer *readbuf; /* From the wire, decrypted in-place */
|
||||||
buffer *payload; /* Post-decompression, the actual SSH packet */
|
buffer *payload; /* Post-decompression, the actual SSH packet */
|
||||||
|
unsigned int payload_beginning;
|
||||||
unsigned int transseq, recvseq; /* Sequence IDs */
|
unsigned int transseq, recvseq; /* Sequence IDs */
|
||||||
|
|
||||||
/* Packet-handling flags */
|
/* Packet-handling flags */
|
||||||
|
Loading…
Reference in New Issue
Block a user