@@ -80,10 +80,10 @@ func parseDSN(dsn string) (cfg *config, err error) {
80
80
// TODO: use strings.IndexByte when we can depend on Go 1.2
81
81
82
82
// [user[:password]@][net[(addr)]]/dbname[?param1=value1¶mN=valueN]
83
- // Find the last '/' (since the password might contain a '/')
83
+ // Find the last '/' (since the password or the net addr might contain a '/')
84
84
for i := len (dsn ) - 1 ; i >= 0 ; i -- {
85
85
if dsn [i ] == '/' {
86
- var j int
86
+ var j , k int
87
87
88
88
// left part is empty if i <= 0
89
89
if i > 0 {
@@ -93,7 +93,6 @@ func parseDSN(dsn string) (cfg *config, err error) {
93
93
if dsn [j ] == '@' {
94
94
// username[:password]
95
95
// Find the first ':' in dsn[:j]
96
- var k int
97
96
for k = 0 ; k < j ; k ++ {
98
97
if dsn [k ] == ':' {
99
98
cfg .passwd = dsn [k + 1 : j ]
@@ -102,31 +101,26 @@ func parseDSN(dsn string) (cfg *config, err error) {
102
101
}
103
102
cfg .user = dsn [:k ]
104
103
105
- // [protocol[(address)]]
106
- // Find the first '(' in dsn[j+1:i]
107
- for k = j + 1 ; k < i ; k ++ {
108
- if dsn [k ] == '(' {
109
- // dsn[i-1] must be == ')' if an adress is specified
110
- if dsn [i - 1 ] != ')' {
111
- if strings .ContainsRune (dsn [k + 1 :i ], ')' ) {
112
- return nil , errInvalidDSNUnescaped
113
- }
114
- return nil , errInvalidDSNAddr
115
- }
116
- cfg .addr = dsn [k + 1 : i - 1 ]
117
- break
118
- }
119
- }
120
- cfg .net = dsn [j + 1 : k ]
121
-
122
104
break
123
105
}
124
106
}
125
107
126
- // non-empty left part must contain an '@'
127
- if j < 0 {
128
- return nil , errInvalidDSNUnescaped
108
+ // [protocol[(address)]]
109
+ // Find the first '(' in dsn[j+1:i]
110
+ for k = j + 1 ; k < i ; k ++ {
111
+ if dsn [k ] == '(' {
112
+ // dsn[i-1] must be == ')' if an adress is specified
113
+ if dsn [i - 1 ] != ')' {
114
+ if strings .ContainsRune (dsn [k + 1 :i ], ')' ) {
115
+ return nil , errInvalidDSNUnescaped
116
+ }
117
+ return nil , errInvalidDSNAddr
118
+ }
119
+ cfg .addr = dsn [k + 1 : i - 1 ]
120
+ break
121
+ }
129
122
}
123
+ cfg .net = dsn [j + 1 : k ]
130
124
}
131
125
132
126
// dbname[?param1=value1&...¶mN=valueN]
0 commit comments