2
0

Remove 0 bytes when sanitizing identifiers

fixes #562
This commit is contained in:
Jack Christensen
2019-08-03 09:45:04 -05:00
parent 6954c15ad0
commit 95ea78048a
2 changed files with 30 additions and 9 deletions
+2 -1
View File
@@ -307,7 +307,8 @@ type Identifier []string
func (ident Identifier) Sanitize() string { func (ident Identifier) Sanitize() string {
parts := make([]string, len(ident)) parts := make([]string, len(ident))
for i := range ident { for i := range ident {
parts[i] = `"` + strings.Replace(ident[i], `"`, `""`, -1) + `"` s := strings.Replace(ident[i], string([]byte{0}), "", -1)
parts[i] = `"` + strings.Replace(s, `"`, `""`, -1) + `"`
} }
return strings.Join(parts, ".") return strings.Join(parts, ".")
} }
+22 -2
View File
@@ -84,7 +84,6 @@ func TestConnect(t *testing.T) {
} }
} }
func TestConnectWithMultiHost(t *testing.T) { func TestConnectWithMultiHost(t *testing.T) {
t.Parallel() t.Parallel()
@@ -129,7 +128,6 @@ func TestConnectWithMultiHost(t *testing.T) {
} }
} }
func TestConnectWithMultiHostWritable(t *testing.T) { func TestConnectWithMultiHostWritable(t *testing.T) {
t.Parallel() t.Parallel()
@@ -2319,6 +2317,24 @@ func TestSetLogLevel(t *testing.T) {
} }
} }
func TestIdentifierSanitizeNullSentToServer(t *testing.T) {
t.Parallel()
conn := mustConnect(t, *defaultConnConfig)
defer closeConn(t, conn)
ident := pgx.Identifier{"foo" + string([]byte{0}) + "bar"}
var n int64
err := conn.QueryRow(`select 1 as ` + ident.Sanitize()).Scan(&n)
if err != nil {
t.Fatal(err)
}
if n != 1 {
t.Fatal("unexpected n")
}
}
func TestIdentifierSanitize(t *testing.T) { func TestIdentifierSanitize(t *testing.T) {
t.Parallel() t.Parallel()
@@ -2346,6 +2362,10 @@ func TestIdentifierSanitize(t *testing.T) {
ident: pgx.Identifier{`you should " not do this`, `please don't`}, ident: pgx.Identifier{`you should " not do this`, `please don't`},
expected: `"you should "" not do this"."please don't"`, expected: `"you should "" not do this"."please don't"`,
}, },
{
ident: pgx.Identifier{`you should ` + string([]byte{0}) + `not do this`},
expected: `"you should not do this"`,
},
} }
for i, tt := range tests { for i, tt := range tests {