Fix converting a null QStringRef to QString

The assumption when calling QStringRef::toString() on a null
QStringRef (i.e. when QStringRef::isNull() is true) is that
QStringRef::toString().isNull() will also return true. With the
current implementation we return a null QString() only when the
QStringRef references a nullptr QString. We need to do the same
also when QStringRef references a QString with null private data.

Change-Id: I4177a5ea187ae758d7c46fe76a9d0583140e90cb
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
Sona Kurazyan 2019-11-04 10:18:41 +01:00
parent 06456873fc
commit 43c964b8ad
2 changed files with 14 additions and 1 deletions

View File

@ -10506,7 +10506,7 @@ ownership of it, no memory is freed when instances are destroyed.
*/
QString QStringRef::toString() const {
if (!m_string)
if (isNull())
return QString();
if (m_size && m_position == 0 && m_size == m_string->size())
return *m_string;

View File

@ -87,6 +87,7 @@ private slots:
void mid();
void split_data();
void split();
void nullToString();
};
static QStringRef emptyRef()
@ -2177,6 +2178,18 @@ void tst_QStringRef::split()
}
}
void tst_QStringRef::nullToString()
{
QStringRef nullRef;
QVERIFY(nullRef.isNull());
QVERIFY(nullRef.toString().isNull());
QString str;
nullRef = &str;
QVERIFY(nullRef.isNull());
QVERIFY(nullRef.toString().isNull());
}
QTEST_APPLESS_MAIN(tst_QStringRef)
#include "tst_qstringref.moc"