diff --git a/config.go b/config.go index b2583546..b05727ca 100644 --- a/config.go +++ b/config.go @@ -506,6 +506,9 @@ func parseDSNSettings(s string) (map[string]string, error) { } if s[end] == '\\' { end++ + if end == len(s) { + return nil, errors.New("invalid backslash") + } } } val = strings.Replace(strings.Replace(s[:end], "\\\\", "\\", -1), "\\'", "'", -1) diff --git a/config_test.go b/config_test.go index 264eb299..d322f65a 100644 --- a/config_test.go +++ b/config_test.go @@ -539,6 +539,13 @@ func TestParseConfigDSNLeadingEqual(t *testing.T) { require.Error(t, err) } +// https://github.com/jackc/pgconn/issues/49 +func TestParseConfigDSNTrailingBackslash(t *testing.T) { + _, err := pgconn.ParseConfig(`x=x\`) + require.Error(t, err) + assert.Contains(t, err.Error(), "invalid backslash") +} + 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)