summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTreeve Jelbert2007-05-05 18:15:56 +0200
committerEric Sandall2007-05-07 17:34:52 -0700
commit6e5cafb78a340112d180984dd3be5de12e0bb42d (patch)
treef9abfa21835f857fa9829d4279200b59d54770c4
parent5d4493b7a27b50ec660c54a37f1a32343cb0f288 (diff)
qt-x11 - fix bug #13762
(cherry picked from commit 88d98d6cecb40444660f4b91cf9072f69be6555c) Conflicts: x11-toolkits/qt-x11/HISTORY
-rwxr-xr-xx11-toolkits/qt-x11/DETAILS2
-rw-r--r--x11-toolkits/qt-x11/HISTORY10
-rwxr-xr-xx11-toolkits/qt-x11/PRE_BUILD3
-rw-r--r--x11-toolkits/qt-x11/Qt-3.3.8-UTF-8-fix.diff106
4 files changed, 118 insertions, 3 deletions
diff --git a/x11-toolkits/qt-x11/DETAILS b/x11-toolkits/qt-x11/DETAILS
index 46fe283dda..bf0b814939 100755
--- a/x11-toolkits/qt-x11/DETAILS
+++ b/x11-toolkits/qt-x11/DETAILS
@@ -10,7 +10,7 @@ SOURCE_DIRECTORY=$BUILD_DIRECTORY/$SPELL-free-$VERSION
WEB_SITE=http://www.trolltech.com/qt/x11.html
KEYWORDS="qt x11 libs"
ENTERED=20020410
- SECURITY_PATCH=1
+ SECURITY_PATCH=2
DOCS="FAQ README README-QT.TXT"
SHORT="Qt simplifies writing and maintaining GUI applications"
cat << EOF
diff --git a/x11-toolkits/qt-x11/HISTORY b/x11-toolkits/qt-x11/HISTORY
index f7c81607b1..112ff041f0 100644
--- a/x11-toolkits/qt-x11/HISTORY
+++ b/x11-toolkits/qt-x11/HISTORY
@@ -1,7 +1,13 @@
-2007-02-20 Treeve Jelbert <treeve@pi.be>
+2007-05-05 Treeve Jelbert <treeve@sourcemage.org>
+ * DETAILS: SECURITY_PATCH++
+ * PRE_BUILD:apply patch
+ * Qt-3.3.8-UTF-8-fix.diff: added
+ fixes bug #13762
+
+2007-02-20 Treeve Jelbert <treeve@sourcemage.org>
* DETAILS: Updated to 3.3.8
-2006-10-22 Treeve Jelbert <treeve@pi.be>
+2006-10-22 Treeve Jelbert <treeve@sourcemage.org>
* DETAILS: Updated to 3.3.7
SECURITY_PATCH
Fixed a potential security issue which could arise when transforming
diff --git a/x11-toolkits/qt-x11/PRE_BUILD b/x11-toolkits/qt-x11/PRE_BUILD
index 00b7869653..d6a04ec76b 100755
--- a/x11-toolkits/qt-x11/PRE_BUILD
+++ b/x11-toolkits/qt-x11/PRE_BUILD
@@ -1,5 +1,8 @@
default_pre_build &&
cd $SOURCE_DIRECTORY &&
+# apply patches
+patch -p0 < $SPELL_DIRECTORY/Qt-3.3.8-UTF-8-fix.diff &&
+
# fix detecction of firebird
sedit "s/-lgds//" configure &&
sedit "/gds/D;/\t}/D" plugins/src/sqldrivers/ibase/ibase.pro &&
diff --git a/x11-toolkits/qt-x11/Qt-3.3.8-UTF-8-fix.diff b/x11-toolkits/qt-x11/Qt-3.3.8-UTF-8-fix.diff
new file mode 100644
index 0000000000..3cb37538f7
--- /dev/null
+++ b/x11-toolkits/qt-x11/Qt-3.3.8-UTF-8-fix.diff
@@ -0,0 +1,106 @@
+--- src/codecs/qutfcodec.cpp Fri Mar 30 06:08:57 2007
++++ src/codecs/qutfcodec.cpp Fri Mar 30 06:08:57 2007
+@@ -154,6 +154,7 @@
+
+ class QUtf8Decoder : public QTextDecoder {
+ uint uc;
++ uint min_uc;
+ int need;
+ bool headerDone;
+ public:
+@@ -167,8 +168,9 @@
+ result.setLength( len ); // worst case
+ QChar *qch = (QChar *)result.unicode();
+ uchar ch;
++ int error = -1;
+ for (int i=0; i<len; i++) {
+- ch = *chars++;
++ ch = chars[i];
+ if (need) {
+ if ( (ch&0xc0) == 0x80 ) {
+ uc = (uc << 6) | (ch & 0x3f);
+@@ -182,6 +184,8 @@
+ *qch++ = QChar(high);
+ *qch++ = QChar(low);
+ headerDone = TRUE;
++ } else if ((uc < min_uc) || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) {
++ *qch++ = QChar::replacement;
+ } else {
+ if (headerDone || QChar(uc) != QChar::byteOrderMark)
+ *qch++ = uc;
+@@ -190,6 +194,7 @@
+ }
+ } else {
+ // error
++ i = error;
+ *qch++ = QChar::replacement;
+ need = 0;
+ }
+@@ -200,13 +205,22 @@
+ } else if ((ch & 0xe0) == 0xc0) {
+ uc = ch & 0x1f;
+ need = 1;
++ error = i;
++ min_uc = 0x80;
+ } else if ((ch & 0xf0) == 0xe0) {
+ uc = ch & 0x0f;
+ need = 2;
++ error = i;
++ min_uc = 0x800;
+ } else if ((ch&0xf8) == 0xf0) {
+ uc = ch & 0x07;
+ need = 3;
+- }
++ error = i;
++ min_uc = 0x10000;
++ } else {
++ // error
++ *qch++ = QChar::replacement;
++ }
+ }
+ }
+ result.truncate( qch - result.unicode() );
+
+--- src/tools/qstring.cpp Fri Mar 30 06:08:57 2007
++++ src/tools/qstring.cpp Fri Mar 30 06:08:57 2007
+@@ -5805,6 +5805,7 @@
+ result.setLength( len ); // worst case
+ QChar *qch = (QChar *)result.unicode();
+ uint uc = 0;
++ uint min_uc = 0;
+ int need = 0;
+ int error = -1;
+ uchar ch;
+@@ -5822,7 +5823,13 @@
+ unsigned short low = uc%0x400 + 0xdc00;
+ *qch++ = QChar(high);
+ *qch++ = QChar(low);
+- } else {
++ } else if (uc < min_uc || (uc >= 0xd800 && uc <= 0xdfff) || (uc >= 0xfffe)) {
++ // overlong seqence, UTF16 surrogate or BOM
++ i = error;
++ qch = addOne(qch, result);
++ *qch++ = QChar(0xdbff);
++ *qch++ = QChar(0xde00+((uchar)utf8[i]));
++ } else {
+ *qch++ = uc;
+ }
+ }
+@@ -5844,14 +5851,17 @@
+ uc = ch & 0x1f;
+ need = 1;
+ error = i;
++ min_uc = 0x80;
+ } else if ((ch & 0xf0) == 0xe0) {
+ uc = ch & 0x0f;
+ need = 2;
+ error = i;
++ min_uc = 0x800;
+ } else if ((ch&0xf8) == 0xf0) {
+ uc = ch & 0x07;
+ need = 3;
+ error = i;
++ min_uc = 0x10000;
+ } else {
+ // Error
+ qch = addOne(qch, result);