diff options
author | Treeve Jelbert | 2007-05-05 18:15:56 +0200 |
---|---|---|
committer | Eric Sandall | 2007-05-07 17:34:52 -0700 |
commit | 6e5cafb78a340112d180984dd3be5de12e0bb42d (patch) | |
tree | f9abfa21835f857fa9829d4279200b59d54770c4 | |
parent | 5d4493b7a27b50ec660c54a37f1a32343cb0f288 (diff) |
qt-x11 - fix bug #13762
(cherry picked from commit 88d98d6cecb40444660f4b91cf9072f69be6555c)
Conflicts:
x11-toolkits/qt-x11/HISTORY
-rwxr-xr-x | x11-toolkits/qt-x11/DETAILS | 2 | ||||
-rw-r--r-- | x11-toolkits/qt-x11/HISTORY | 10 | ||||
-rwxr-xr-x | x11-toolkits/qt-x11/PRE_BUILD | 3 | ||||
-rw-r--r-- | x11-toolkits/qt-x11/Qt-3.3.8-UTF-8-fix.diff | 106 |
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);
|