浏览代码

kex: safety check for accessing CSeq in per method stats

- GH #1687
Daniel-Constantin Mierla 7 年之前
父节点
当前提交
5e763029dc
共有 1 个文件被更改,包括 11 次插入2 次删除
  1. 11 2
      src/modules/kex/core_stats.c

+ 11 - 2
src/modules/kex/core_stats.c

@@ -234,8 +234,17 @@ static int km_cb_req_stats(struct sip_msg *msg,
 static int km_cb_rpl_stats_by_method(struct sip_msg *msg,
 		unsigned int flags, void *param)
 {
-      int method = get_cseq(msg)->method_id;
-      int group = msg->first_line.u.reply.statuscode / 100 - 1;
+	int method = 0;
+	int group = 0;
+
+	if(msg==NULL) {
+		return -1;
+	}
+	if (!msg->cseq && (parse_headers(msg, HDR_CSEQ_F, 0) < 0 || !msg->cseq)) {
+		return -1;
+	}
+	method = get_cseq(msg)->method_id;
+	group = msg->first_line.u.reply.statuscode / 100 - 1;
 
       if (group >= 0 && group <= 5) {
             switch(method) {