From c6bc21bc1a1bb64f6031960a979bcfe627cf1697 Mon Sep 17 00:00:00 2001 From: Vladimir Olteanu Date: Wed, 26 Apr 2017 21:46:24 +0300 Subject: [PATCH] Make use of struct when parsing method select requests --- src/local.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/local.c b/src/local.c index c284ee66..3608fea1 100644 --- a/src/local.c +++ b/src/local.c @@ -465,10 +465,11 @@ server_recv_cb(EV_P_ ev_io *w, int revents) // all processed return; } else if (server->stage == STAGE_INIT) { - if (buf->len < 3) { + if (buf->len < sizeof(struct method_select_request) + 1) { return; } - int method_len = (buf->data[1] & 0xff) + 2; + struct method_select_request *method = (struct method_select_request *)buf->data; + int method_len = method->nmethods + sizeof(struct method_select_request); if (buf->len < method_len) { return; } @@ -479,7 +480,7 @@ server_recv_cb(EV_P_ ev_io *w, int revents) send(server->fd, send_buf, sizeof(response), 0); server->stage = STAGE_HANDSHAKE; - if (buf->data[0] == 0x05 && method_len < (int)(buf->len)) { + if (method->ver == SVERSION && method_len < (int)(buf->len)) { memmove(buf->data, buf->data + method_len , buf->len - method_len); buf->len -= method_len; continue;