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")
|
||||
s = strings.TrimLeft(s[eqIdx+1:], " \t\n\r\v\f")
|
||||
if s[0] != '\'' {
|
||||
if len(s) == 0 {
|
||||
} else if s[0] != '\'' {
|
||||
end := 0
|
||||
for ; end < len(s); end++ {
|
||||
if asciiSpace[s[end]] == 1 {
|
||||
@@ -539,6 +540,10 @@ func parseDSNSettings(s string) (map[string]string, error) {
|
||||
key = k
|
||||
}
|
||||
|
||||
if key == "" {
|
||||
return nil, errors.New("invalid dsn")
|
||||
}
|
||||
|
||||
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) {
|
||||
connString := "postgres://jack:secret@localhost:5432/mydb?application_name=pgxtest&search_path=myschema&connect_timeout=5"
|
||||
original, err := pgconn.ParseConfig(connString)
|
||||
|
||||
Reference in New Issue
Block a user