Skip to content

Commit

Permalink
db: correct parsing ipv6 address for host
Browse files Browse the repository at this point in the history
  • Loading branch information
vasilevalex committed Dec 10, 2018
1 parent 084ab2c commit bfbfa83
Showing 1 changed file with 24 additions and 3 deletions.
27 changes: 24 additions & 3 deletions db/db_id.c
Expand Up @@ -79,13 +79,14 @@ static int parse_db_url(struct db_id* id, const str* url)
ST_USER_HOST, /* Username or hostname */
ST_PASS_PORT, /* Password or port part */
ST_HOST, /* Hostname part */
ST_HOST6, /* Hostname part IPv6 */
ST_PORT, /* Port part */
ST_DB, /* Database part */
ST_PARAMS /* Parameters part */
};

enum state st;
unsigned int len, i;
unsigned int len, i, ipv6_flag;
const char* begin;
char* prev_token;

Expand Down Expand Up @@ -152,6 +153,11 @@ static int parse_db_url(struct db_id* id, const str* url)
begin = url->s + i + 1;
break;

case '[':
st = ST_HOST6;
begin = url->s + i + 1;
break;

case '/':
st = ST_DB;
if (dupl_string(&id->host, begin, url->s + i) < 0) goto err;
Expand All @@ -178,19 +184,34 @@ static int parse_db_url(struct db_id* id, const str* url)

case ST_HOST:
switch(url->s[i]) {
case '[':
st = ST_HOST6;
begin = url->s + i + 1;
break;

case ':':
st = ST_PORT;
if (dupl_string(&id->host, begin, url->s + i) < 0) goto err;
if (dupl_string(&id->host, begin, url->s + i - ipv6_flag) < 0) goto err;
begin = url->s + i + 1;
break;

case '/':
if (dupl_string(&id->host, begin, url->s + i) < 0) goto err;
if (dupl_string(&id->host, begin, url->s + i - ipv6_flag) < 0) goto err;
st = ST_DB;
begin = url->s + i + 1;
}
break;

case ST_HOST6:
switch(url->s[i]) {
case ']':
ipv6_flag = 1;
st = ST_HOST;
break;

}
break;

case ST_PORT:
switch(url->s[i]) {
case '/':
Expand Down

0 comments on commit bfbfa83

Please sign in to comment.