浏览代码

tls: safety checks for select values

Daniel-Constantin Mierla 7 年之前
父节点
当前提交
084364becd
共有 1 个文件被更改,包括 10 次插入2 次删除
  1. 10 2
      src/modules/tls/tls_select.c

+ 10 - 2
src/modules/tls/tls_select.c

@@ -198,7 +198,11 @@ static int get_cipher(str* res, sip_msg_t* msg)
 		ERR("Cipher name too long\n");
 		ERR("Cipher name too long\n");
 		goto err;
 		goto err;
 	}
 	}
-	memcpy(buf, cipher.s, cipher.len);
+	if(cipher.s!=NULL && cipher.len>0) {
+		memcpy(buf, cipher.s, cipher.len);
+	} else {
+		buf[0] = '\0';
+	}
 	res->s = buf;
 	res->s = buf;
 	res->len = cipher.len;
 	res->len = cipher.len;
 	tcpconn_put(c);
 	tcpconn_put(c);
@@ -298,7 +302,11 @@ static int get_version(str* res, sip_msg_t* msg)
 		ERR("Version string too long\n");
 		ERR("Version string too long\n");
 		goto err;
 		goto err;
 	}
 	}
-	memcpy(buf, version.s, version.len);
+	if(version.s!=NULL && version.len>0) {
+		memcpy(buf, version.s, version.len);
+	} else {
+		buf[0] = '\0';
+	}
 	res->s = buf;
 	res->s = buf;
 	res->len = version.len;
 	res->len = version.len;
 	tcpconn_put(c);
 	tcpconn_put(c);