Skip to content

Commit 4967a3c

Browse files
committed
fix(analyzer): deep copy 2d slice to prevent shared-slice mutation
1 parent 16d2fd1 commit 4967a3c

1 file changed

Lines changed: 5 additions & 1 deletion

File tree

server/analyzer/resolve_values_types.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,12 @@ func transformValuesNode(n sql.Node) (sql.Node, transform.TreeIdentity, error) {
151151
// If we require any casts, then we'll add casting to all expressions in the list
152152
if requiresCasts {
153153
if len(newTuples) == 0 {
154+
// Deep copy to avoid mutating the original expression tuples.
154155
newTuples = make([][]sql.Expression, len(values.ExpressionTuples))
155-
copy(newTuples, values.ExpressionTuples)
156+
for i, row := range values.ExpressionTuples {
157+
newTuples[i] = make([]sql.Expression, len(row))
158+
copy(newTuples[i], row)
159+
}
156160
}
157161
for rowIdx := 0; rowIdx < len(newTuples); rowIdx++ {
158162
newTuples[rowIdx][colIdx] = pgexprs.NewImplicitCast(

0 commit comments

Comments
 (0)