2
0

Fix panic on parsing DSN with trailing '='

Also correctly return error with leading '='.

fixes #47
This commit is contained in:
Jack Christensen
2020-07-29 22:11:15 -05:00
parent 4e4c4ea541
commit 44079b0d2c
2 changed files with 17 additions and 1 deletions
+6 -1
View File
@@ -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
}
+11
View File
@@ -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)