From bad5515e49e1e4965ac6b9db532c1266207740c2 Mon Sep 17 00:00:00 2001 From: "7u83@mail.ru" <7u83@mail.ru@noemail.net> Date: Mon, 11 Apr 2016 16:02:30 +0000 Subject: [PATCH] Fix seg fault when debugging malformed packets. FossilOrigin-Name: 00ef6c62d1aa05b454fc7edce9ad0622cb969c886fab51748391dfc470d1fcea --- src/cw/conn_process_packet.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/cw/conn_process_packet.c b/src/cw/conn_process_packet.c index 1b7954d7..ffea24a8 100644 --- a/src/cw/conn_process_packet.c +++ b/src/cw/conn_process_packet.c @@ -381,9 +381,6 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, as.elem_id = cw_get_elem_id(elem); int elem_len = cw_get_elem_len(elem); - cw_dbg_elem(DBG_ELEM, conn, as.msg_id, as.elem_id, cw_get_elem_data(elem), - elem_len); - af = cw_actionlist_in_get(conn->actions->in, &as); @@ -399,6 +396,10 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, if (!check_len(conn, af, cw_get_elem_data(elem), elem_len, from)) { continue; } + cw_dbg_elem(DBG_ELEM, conn, as.msg_id, as.elem_id, cw_get_elem_data(elem), + elem_len); + + int afrc = 1; if (af->start) { @@ -413,6 +414,10 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, stravltree_add(conn->mand, af->item_id); } + if(conn->elem_end){ + afrc = conn->elem_end(conn,af,afrc,cw_get_elem_data(elem), elem_len,from); + } + } /* all message elements are processed, do now after processing @@ -421,7 +426,9 @@ static int process_elements(struct conn *conn, uint8_t * rawmsg, int len, int result_code = 0; - int rct = cw_in_check_generic_req(conn, afm, rawmsg, len, from); + + int rct = cw_in_check_generic(conn, afm, rawmsg, len, from); + if (rct && conn->strict_capwap) { result_code = rct;