diff options
author | Treeve Jelbert | 2007-05-05 18:15:56 +0200 |
---|---|---|
committer | Eric Sandall | 2007-05-07 17:16:51 -0700 |
commit | 926a6dc23ab1fe415de176291fcf46a6ff0f2b46 (patch) | |
tree | 1d07b8428aeb4a3f52fa074edae6bb660b78e9ad | |
parent | 113fc2a6f95aa84e7569951f5cc79a4d62a1ff1d (diff) |
qt-x11 - fix bug #13762
(cherry picked from commit 88d98d6cecb40444660f4b91cf9072f69be6555c)
-rwxr-xr-x | x11-toolkits/qt-x11/DETAILS | 2 | ||||
-rw-r--r-- | x11-toolkits/qt-x11/HISTORY | 6 | ||||
-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, 116 insertions, 1 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 f94363bd6e..463e901ec1 100644 --- a/x11-toolkits/qt-x11/HISTORY +++ b/x11-toolkits/qt-x11/HISTORY @@ -1,3 +1,9 @@ +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 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);
|