From 14dd82045e5f8fdc7b0480c96853656471bacc78 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Tue, 5 Mar 2019 09:52:44 +0800 Subject: [PATCH] Refine json config handling. #2308 --- src/jconf.c | 11 +++++++++-- src/local.c | 5 +++-- src/redir.c | 10 ++++++---- src/server.c | 4 ++-- src/tunnel.c | 10 ++++++---- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/jconf.c b/src/jconf.c index c03854a6..bf36a578 100644 --- a/src/jconf.c +++ b/src/jconf.c @@ -68,9 +68,10 @@ parse_addr(const char *str_in, ss_addr_t *addr) if (str_in == NULL) return; - int ipv6 = 0, ret = -1, n = 0; + int ipv6 = 0, ret = -1, n = 0, len; char *pch; char *str = strdup(str_in); + len = strlen(str_in); struct cork_ip ip; if (cork_ip_init(&ip, str) != -1) { @@ -85,6 +86,7 @@ parse_addr(const char *str_in, ss_addr_t *addr) ret = pch - str; pch = strchr(pch + 1, ':'); } + if (n > 1) { ipv6 = 1; if (str[ret - 1] != ']') { @@ -105,7 +107,12 @@ parse_addr(const char *str_in, ss_addr_t *addr) } else { addr->host = ss_strndup(str, ret); } - addr->port = strdup(str + ret + 1); + if (ret < len - 1) + { + addr->port = strdup(str + ret + 1); + } else { + addr->port = NULL; + } } free(str); diff --git a/src/local.c b/src/local.c index 15a583af..949053eb 100644 --- a/src/local.c +++ b/src/local.c @@ -1465,12 +1465,13 @@ main(int argc, char **argv) char *plugin_port = NULL; char tmp_port[8]; - srand(time(NULL)); - int remote_num = 0; ss_addr_t remote_addr[MAX_REMOTE_NUM]; char *remote_port = NULL; + memset(remote_addr, 0, sizeof(ss_addr_t) * MAX_REMOTE_NUM); + srand(time(NULL)); + static struct option long_options[] = { { "reuse-port", no_argument, NULL, GETOPT_VAL_REUSE_PORT }, { "fast-open", no_argument, NULL, GETOPT_VAL_FAST_OPEN }, diff --git a/src/redir.c b/src/redir.c index be9da078..f5af00bb 100644 --- a/src/redir.c +++ b/src/redir.c @@ -854,13 +854,15 @@ main(int argc, char **argv) char *plugin_port = NULL; char tmp_port[8]; - int remote_num = 0; - ss_addr_t remote_addr[MAX_REMOTE_NUM]; - char *remote_port = NULL; - int dscp_num = 0; ss_dscp_t *dscp = NULL; + int remote_num = 0; + char *remote_port = NULL; + ss_addr_t remote_addr[MAX_REMOTE_NUM]; + + memset(remote_addr, 0, sizeof(ss_addr_t) * MAX_REMOTE_NUM); + static struct option long_options[] = { { "fast-open", no_argument, NULL, GETOPT_VAL_FAST_OPEN }, { "mtu", required_argument, NULL, GETOPT_VAL_MTU }, diff --git a/src/server.c b/src/server.c index eced490b..c00d5146 100644 --- a/src/server.c +++ b/src/server.c @@ -1610,11 +1610,11 @@ main(int argc, char **argv) char *plugin_host = NULL; char *plugin_port = NULL; char tmp_port[8]; + char *nameservers = NULL; int server_num = 0; ss_addr_t server_addr[MAX_REMOTE_NUM]; - - char *nameservers = NULL; + memset(server_addr, 0, sizeof(ss_addr_t) * MAX_REMOTE_NUM); static struct option long_options[] = { { "fast-open", no_argument, NULL, GETOPT_VAL_FAST_OPEN }, diff --git a/src/tunnel.c b/src/tunnel.c index 7a33d33d..b55b895a 100644 --- a/src/tunnel.c +++ b/src/tunnel.c @@ -885,13 +885,15 @@ main(int argc, char **argv) char *plugin_port = NULL; char tmp_port[8]; - int remote_num = 0; - ss_addr_t remote_addr[MAX_REMOTE_NUM]; - char *remote_port = NULL; - ss_addr_t tunnel_addr = { .host = NULL, .port = NULL }; char *tunnel_addr_str = NULL; + int remote_num = 0; + char *remote_port = NULL; + ss_addr_t remote_addr[MAX_REMOTE_NUM]; + + memset(remote_addr, 0, sizeof(ss_addr_t) * MAX_REMOTE_NUM); + static struct option long_options[] = { { "fast-open", no_argument, NULL, GETOPT_VAL_FAST_OPEN }, { "mtu", required_argument, NULL, GETOPT_VAL_MTU },