summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSlávek Banko <slavek.banko@axis.cz>2022-03-22 02:40:43 +0100
committerSlávek Banko <slavek.banko@axis.cz>2022-03-22 09:00:27 +0100
commitf837b16e3643b563353b00180153ff906de5de11 (patch)
tree2ca4b5ade18715588ee2e936fa64cb3c9bb9a634
parentbe256666b2d960267a6162df5fbb0a26db62796a (diff)
downloadtqt3-f837b16e3643b563353b00180153ff906de5de11.tar.gz
tqt3-f837b16e3643b563353b00180153ff906de5de11.zip
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 e919ffc1ec291cc393e48ea0b9b2580a7a4f954a)
-rw-r--r--src/tools/qstring.cpp17
1 files changed, 13 insertions, 4 deletions
diff --git a/src/tools/qstring.cpp b/src/tools/qstring.cpp
index e6f9260a..25ec4204 100644
--- a/src/tools/qstring.cpp
+++ b/src/tools/qstring.cpp
@@ -5991,6 +5991,14 @@ void TQString::setSecurityUnPaged(bool lock) {
*/
TQCString TQString::utf8() const
{
+ if (!d->cString) {
+ d->cString = new TQCString;
+ }
+ if(d == shared_null)
+ {
+ return *d->cString;
+ }
+
int l = length();
int rlen = l*3+1;
TQCString rstr(rlen);
@@ -6035,11 +6043,8 @@ TQCString TQString::utf8() const
++ch;
}
rstr.truncate( cursor - (uchar*)rstr.data() );
- if (!d->cString) {
- d->cString = new TQCString;
- }
*d->cString = rstr;
- return rstr;
+ return *d->cString;
}
static TQChar *addOne(TQChar *qch, TQString &str)
@@ -6243,6 +6248,10 @@ TQCString TQString::local8Bit() const
if (!d->cString) {
d->cString = new TQCString;
}
+ if(d == shared_null)
+ {
+ return *d->cString;
+ }
#ifdef QT_NO_TEXTCODEC
*d->cString = TQCString(latin1());
return *d->cString;