mirror of https://github.com/qt/qtgrpc.git
Fix re-initializing a moved-from QProtobufMessage using copy
It was expecting the data-pointer was not nullptr, but after moving out
it is.
Fixes: QTBUG-119227
Change-Id: I3a8907dd0e16b33604481d9d6c382c238b067676
Reviewed-by: Alexey Edelev <alexey.edelev@qt.io>
(cherry picked from commit 0bc538fa9a)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
df16712156
commit
0ce7f59cc1
|
|
@ -148,7 +148,11 @@ QProtobufMessage::QProtobufMessage(const QProtobufMessage &other)
|
|||
*/
|
||||
QProtobufMessage &QProtobufMessage::operator=(const QProtobufMessage &other)
|
||||
{
|
||||
if (this != &other)
|
||||
if (!other.d_ptr)
|
||||
delete std::exchange(d_ptr, {}); // delete d_ptr if other.d_ptr is null
|
||||
else if (!d_ptr)
|
||||
d_ptr = new QProtobufMessagePrivate(*other.d_ptr);
|
||||
else if (this != &other)
|
||||
*d_ptr = *other.d_ptr;
|
||||
return *this;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,6 +62,18 @@ void QtProtobufTypesGenerationTest::EmptyMessageTest()
|
|||
QProtobufMessagePointer rawMessage(
|
||||
QProtobufMessage::constructByName("qtprotobufnamespace.tests.EmptyMessage"));
|
||||
QVERIFY(reinterpret_cast<qtprotobufnamespace::tests::EmptyMessage*>(rawMessage.get()) != nullptr);
|
||||
|
||||
// Move from and reuse. This should compile and run:
|
||||
qtprotobufnamespace::tests::EmptyMessage from;
|
||||
qtprotobufnamespace::tests::EmptyMessage to = std::move(from);
|
||||
from = to;
|
||||
QCOMPARE(from, to);
|
||||
|
||||
qtprotobufnamespace::tests::EmptyMessage bucket = std::move(to);
|
||||
bucket = std::move(from);
|
||||
|
||||
from = to;
|
||||
QCOMPARE(from, to);
|
||||
}
|
||||
|
||||
void QtProtobufTypesGenerationTest::BoolMessageTest()
|
||||
|
|
@ -77,6 +89,20 @@ void QtProtobufTypesGenerationTest::BoolMessageTest()
|
|||
QCOMPARE(SimpleBoolMessage::TestFieldBoolProtoFieldNumber, 1);
|
||||
QCOMPARE(test.propertyOrdering.getMessageFullName(),
|
||||
"qtprotobufnamespace.tests.SimpleBoolMessage");
|
||||
|
||||
// Move from and reuse
|
||||
qtprotobufnamespace::tests::SimpleBoolMessage from;
|
||||
qtprotobufnamespace::tests::SimpleBoolMessage to = std::move(from);
|
||||
from = to;
|
||||
QCOMPARE(from.testFieldBool(), to.testFieldBool());
|
||||
// Changes in one should not be visible in the other:
|
||||
to.setTestFieldBool(!to.testFieldBool());
|
||||
QCOMPARE_NE(from.testFieldBool(), to.testFieldBool());
|
||||
|
||||
from = to;
|
||||
to.setProperty(propertyName, QVariant::fromValue(!to.testFieldBool()));
|
||||
QCOMPARE_NE(from.testFieldBool(), to.testFieldBool());
|
||||
|
||||
}
|
||||
|
||||
void QtProtobufTypesGenerationTest::IntMessageTest()
|
||||
|
|
|
|||
Loading…
Reference in New Issue