Fix panic on parsing DSN with trailing '='
Also correctly return error with leading '='. fixes #47
This commit is contained in:
@@ -497,7 +497,8 @@ func parseDSNSettings(s string) (map[string]string, error) {
|
|||||||
|
|
||||||
key = strings.Trim(s[:eqIdx], " \t\n\r\v\f")
|
key = strings.Trim(s[:eqIdx], " \t\n\r\v\f")
|
||||||
s = strings.TrimLeft(s[eqIdx+1:], " \t\n\r\v\f")
|
s = strings.TrimLeft(s[eqIdx+1:], " \t\n\r\v\f")
|
||||||
if s[0] != '\'' {
|
if len(s) == 0 {
|
||||||
|
} else if s[0] != '\'' {
|
||||||
end := 0
|
end := 0
|
||||||
for ; end < len(s); end++ {
|
for ; end < len(s); end++ {
|
||||||
if asciiSpace[s[end]] == 1 {
|
if asciiSpace[s[end]] == 1 {
|
||||||
@@ -539,6 +540,10 @@ func parseDSNSettings(s string) (map[string]string, error) {
|
|||||||
key = k
|
key = k
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if key == "" {
|
||||||
|
return nil, errors.New("invalid dsn")
|
||||||
|
}
|
||||||
|
|
||||||
settings[key] = val
|
settings[key] = val
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -528,6 +528,17 @@ func TestParseConfig(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// https://github.com/jackc/pgconn/issues/47
|
||||||
|
func TestParseConfigDSNWithTrailingEmptyEqualDoesNotPanic(t *testing.T) {
|
||||||
|
_, err := pgconn.ParseConfig("host= user= password= port= database=")
|
||||||
|
require.NoError(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestParseConfigDSNLeadingEqual(t *testing.T) {
|
||||||
|
_, err := pgconn.ParseConfig("= user=jack")
|
||||||
|
require.Error(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
func TestConfigCopyReturnsEqualConfig(t *testing.T) {
|
func TestConfigCopyReturnsEqualConfig(t *testing.T) {
|
||||||
connString := "postgres://jack:secret@localhost:5432/mydb?application_name=pgxtest&search_path=myschema&connect_timeout=5"
|
connString := "postgres://jack:secret@localhost:5432/mydb?application_name=pgxtest&search_path=myschema&connect_timeout=5"
|
||||||
original, err := pgconn.ParseConfig(connString)
|
original, err := pgconn.ParseConfig(connString)
|
||||||
|
|||||||
Reference in New Issue
Block a user