Skip to content

Commit 1c4be1b

Browse files
committed
Avoid accessing unset indices in symmetric copyto!
1 parent 1ce8426 commit 1c4be1b

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/symmetric.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ function copyto!(dest::Symmetric, src::Symmetric)
352352
elseif src.uplo == dest.uplo
353353
copytrito!(dest.data, src.data, src.uplo)
354354
else
355-
transpose!(dest.data, Base.unalias(dest.data, src.data))
355+
copytrito!(dest.data, transpose(Base.unalias(dest.data, src.data)), dest.uplo)
356356
end
357357
return dest
358358
end
@@ -363,7 +363,7 @@ function copyto!(dest::Hermitian, src::Hermitian)
363363
elseif src.uplo == dest.uplo
364364
copytrito!(dest.data, src.data, src.uplo)
365365
else
366-
adjoint!(dest.data, Base.unalias(dest.data, src.data))
366+
copytrito!(dest.data, adjoint(Base.unalias(dest.data, src.data)), dest.uplo)
367367
end
368368
return dest
369369
end

test/symmetric.jl

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1163,4 +1163,19 @@ end
11631163
end
11641164
end
11651165

1166+
@testset "copyto! with mismatched uplo" begin
1167+
for (S,tf) in ((Symmetric, transpose), (Hermitian, adjoint))
1168+
for (uplo1,uplo2) in [(:U,:L), (:L, :U)]
1169+
M = Matrix{Complex{BigFloat}}(undef, 2, 2)
1170+
M[1,1] = M[2,2] = 3
1171+
isupper = uplo1 == :U
1172+
M[1+!isupper, 1+isupper] = 4+3im
1173+
H1 = S(M, uplo1)
1174+
H2 = 2 * S(tf(M), uplo2)
1175+
copyto!(H2, H1)
1176+
@test H2 == H1
1177+
end
1178+
end
1179+
end
1180+
11661181
end # module TestSymmetric

0 commit comments

Comments
 (0)