From b674576db854f0e6164772bdd47612d0bcc8a8d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=9D=A5?= Date: Tue, 30 May 2017 23:03:46 +0800 Subject: [PATCH 1/2] add test case for ':' in username --- dsn_test.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dsn_test.go b/dsn_test.go index 4fd76b813..41e514b36 100644 --- a/dsn_test.go +++ b/dsn_test.go @@ -23,6 +23,9 @@ var testDSNs = []struct { }{{ "username:password@protocol(address)/dbname?param=value", &Config{User: "username", Passwd: "password", Net: "protocol", Addr: "address", DBName: "dbname", Params: map[string]string{"param": "value"}, Collation: "utf8_general_ci", Loc: time.UTC}, +}, { + "user:name:password@protocol(address)/dbname?param=value", + &Config{User: "user:name", Passwd: "password", Net: "protocol", Addr: "address", DBName: "dbname", Params: map[string]string{"param": "value"}, Collation: "utf8_general_ci", Loc: time.UTC}, }, { "username:password@protocol(address)/dbname?param=value&columnsWithAlias=true", &Config{User: "username", Passwd: "password", Net: "protocol", Addr: "address", DBName: "dbname", Params: map[string]string{"param": "value"}, Collation: "utf8_general_ci", Loc: time.UTC, ColumnsWithAlias: true}, From 6c44b433d14b04d2bd835faa219a1c2e45be7ba5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E6=9D=A5?= Date: Tue, 30 May 2017 23:08:04 +0800 Subject: [PATCH 2/2] fix ParseDSN when ':' in username --- dsn.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/dsn.go b/dsn.go index c49827f5d..8c6b778e8 100644 --- a/dsn.go +++ b/dsn.go @@ -288,12 +288,17 @@ func ParseDSN(dsn string) (cfg *Config, err error) { if dsn[j] == '@' { // username[:password] // Find the first ':' in dsn[:j] - for k = 0; k < j; k++ { + for k = j - 1; k >= 0; k-- { if dsn[k] == ':' { cfg.Passwd = dsn[k+1 : j] break } } + + // no ':' in dsn[:j] + if k < 0 { + k = j + } cfg.User = dsn[:k] break