Avoid changes of d->cString for TQString::shared_null to make the value reliable.

This precedes unnecessary allocations, potential use after free and crashes.

Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
(cherry picked from commit e919ffc1ec)
r14.0.x
Slávek Banko 2 years ago
parent be256666b2
commit f837b16e36
No known key found for this signature in database
GPG Key ID: 608F5293A04BE668

@ -5991,6 +5991,14 @@ void TQString::setSecurityUnPaged(bool lock) {
*/ */
TQCString TQString::utf8() const TQCString TQString::utf8() const
{ {
if (!d->cString) {
d->cString = new TQCString;
}
if(d == shared_null)
{
return *d->cString;
}
int l = length(); int l = length();
int rlen = l*3+1; int rlen = l*3+1;
TQCString rstr(rlen); TQCString rstr(rlen);
@ -6035,11 +6043,8 @@ TQCString TQString::utf8() const
++ch; ++ch;
} }
rstr.truncate( cursor - (uchar*)rstr.data() ); rstr.truncate( cursor - (uchar*)rstr.data() );
if (!d->cString) {
d->cString = new TQCString;
}
*d->cString = rstr; *d->cString = rstr;
return rstr; return *d->cString;
} }
static TQChar *addOne(TQChar *qch, TQString &str) static TQChar *addOne(TQChar *qch, TQString &str)
@ -6243,6 +6248,10 @@ TQCString TQString::local8Bit() const
if (!d->cString) { if (!d->cString) {
d->cString = new TQCString; d->cString = new TQCString;
} }
if(d == shared_null)
{
return *d->cString;
}
#ifdef QT_NO_TEXTCODEC #ifdef QT_NO_TEXTCODEC
*d->cString = TQCString(latin1()); *d->cString = TQCString(latin1());
return *d->cString; return *d->cString;

Loading…
Cancel
Save