SOURCES: 0076-fix-qprocess.diff (NEW), 0077-utf8-decoder-fixes.dif...
arekm
arekm at pld-linux.org
Thu Mar 29 18:30:51 CEST 2007
Author: arekm Date: Thu Mar 29 16:30:51 2007 GMT
Module: SOURCES Tag: HEAD
---- Log message:
- new qt copy fixes
---- Files affected:
SOURCES:
0076-fix-qprocess.diff (NONE -> 1.1) (NEW), 0077-utf8-decoder-fixes.diff (NONE -> 1.1) (NEW)
---- Diffs:
================================================================
Index: SOURCES/0076-fix-qprocess.diff
diff -u /dev/null SOURCES/0076-fix-qprocess.diff:1.1
--- /dev/null Thu Mar 29 18:30:51 2007
+++ SOURCES/0076-fix-qprocess.diff Thu Mar 29 18:30:46 2007
@@ -0,0 +1,19 @@
+qt-bugs@ issue : none
+bugs.kde.org number : none
+applied: no
+author: from trolltech
+
+Fixes a regression in QProgress::writeToStdin()
+
+
+--- src/kernel/qprocess.cpp
++++ src/kernel/qprocess.cpp
+@@ -727,7 +727,7 @@ void QProcess::closeStdinLaunch()
+ void QProcess::writeToStdin( const QString& buf )
+ {
+ QByteArray tmp = buf.local8Bit();
+- tmp.resize( tmp.size() - 1 ); // drop the implicit \0
++ tmp.resize( qstrlen( tmp.data() ) );
+ writeToStdin( tmp );
+ }
+
================================================================
Index: SOURCES/0077-utf8-decoder-fixes.diff
diff -u /dev/null SOURCES/0077-utf8-decoder-fixes.diff:1.1
--- /dev/null Thu Mar 29 18:30:51 2007
+++ SOURCES/0077-utf8-decoder-fixes.diff Thu Mar 29 18:30:46 2007
@@ -0,0 +1,109 @@
+qt-bugs@ issue : N154454
+bugs.kde.org number : none
+applied: no
+author: Dirk Mueller <mueller at kde.org>
+
+This patch makes the utf8 decoders in Qt reject overlong
+sequences, like required.
+
+--- src/codecs/qutfcodec.cpp
++++ src/codecs/qutfcodec.cpp
+@@ -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,12 +205,21 @@
+ } 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;
+ }
+ }
+ }
+--- src/tools/qstring.cpp
++++ src/tools/qstring.cpp
+@@ -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,6 +5823,12 @@
+ unsigned short low = uc%0x400 + 0xdc00;
+ *qch++ = QChar(high);
+ *qch++ = QChar(low);
++ } 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);
================================================================
More information about the pld-cvs-commit
mailing list