Commit 4e2b6d6b by Shahbaz Youssefi Committed by Commit Bot

Fix PackedVarying's move constructor

The move constructor was calling the move assignment operator, which used std::swap on the members. However, `this` was not constructed, so std::swap was operating on uninitialized values. Caught by UBSAN. Bug: chromium:1159444 Change-Id: I65f2f0affd1461f880c59780f31a368779411f24 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2599936Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarIan Elliott <ianelliott@google.com> Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
parent 4ebcee3e
...@@ -98,9 +98,11 @@ VaryingInShaderRef::VaryingInShaderRef(ShaderType stageIn, const sh::ShaderVaria ...@@ -98,9 +98,11 @@ VaryingInShaderRef::VaryingInShaderRef(ShaderType stageIn, const sh::ShaderVaria
VaryingInShaderRef::~VaryingInShaderRef() = default; VaryingInShaderRef::~VaryingInShaderRef() = default;
VaryingInShaderRef::VaryingInShaderRef(VaryingInShaderRef &&other) VaryingInShaderRef::VaryingInShaderRef(VaryingInShaderRef &&other)
{ : varying(other.varying),
*this = std::move(other); stage(other.stage),
} parentStructName(std::move(other.parentStructName)),
parentStructMappedName(std::move(other.parentStructMappedName))
{}
VaryingInShaderRef &VaryingInShaderRef::operator=(VaryingInShaderRef &&other) VaryingInShaderRef &VaryingInShaderRef::operator=(VaryingInShaderRef &&other)
{ {
...@@ -142,11 +144,14 @@ PackedVarying::PackedVarying(VaryingInShaderRef &&frontVaryingIn, ...@@ -142,11 +144,14 @@ PackedVarying::PackedVarying(VaryingInShaderRef &&frontVaryingIn,
PackedVarying::~PackedVarying() = default; PackedVarying::~PackedVarying() = default;
PackedVarying::PackedVarying(PackedVarying &&other) PackedVarying::PackedVarying(PackedVarying &&other)
: frontVarying(other.frontVarying.stage, other.frontVarying.varying), : frontVarying(std::move(other.frontVarying)),
backVarying(other.backVarying.stage, other.backVarying.varying) backVarying(std::move(other.backVarying)),
{ interpolation(other.interpolation),
*this = std::move(other); arrayIndex(other.arrayIndex),
} isTransformFeedback(other.isTransformFeedback),
fieldIndex(other.fieldIndex),
secondaryFieldIndex(other.secondaryFieldIndex)
{}
PackedVarying &PackedVarying::operator=(PackedVarying &&other) PackedVarying &PackedVarying::operator=(PackedVarying &&other)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment