summaryrefslogtreecommitdiffstats
path: root/dev-qt/qt/files/trinity-3.5.13.1..3.5.13.2/qt3-2013-04-20_19_02_01-Make-basic-integer-QDataStream-reads-resistant-to-corruption-from-underlying-IO-device-failure-60621ef.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dev-qt/qt/files/trinity-3.5.13.1..3.5.13.2/qt3-2013-04-20_19_02_01-Make-basic-integer-QDataStream-reads-resistant-to-corruption-from-underlying-IO-device-failure-60621ef.patch')
-rw-r--r--dev-qt/qt/files/trinity-3.5.13.1..3.5.13.2/qt3-2013-04-20_19_02_01-Make-basic-integer-QDataStream-reads-resistant-to-corruption-from-underlying-IO-device-failure-60621ef.patch133
1 files changed, 133 insertions, 0 deletions
diff --git a/dev-qt/qt/files/trinity-3.5.13.1..3.5.13.2/qt3-2013-04-20_19_02_01-Make-basic-integer-QDataStream-reads-resistant-to-corruption-from-underlying-IO-device-failure-60621ef.patch b/dev-qt/qt/files/trinity-3.5.13.1..3.5.13.2/qt3-2013-04-20_19_02_01-Make-basic-integer-QDataStream-reads-resistant-to-corruption-from-underlying-IO-device-failure-60621ef.patch
new file mode 100644
index 00000000..d8ca2cfc
--- /dev/null
+++ b/dev-qt/qt/files/trinity-3.5.13.1..3.5.13.2/qt3-2013-04-20_19_02_01-Make-basic-integer-QDataStream-reads-resistant-to-corruption-from-underlying-IO-device-failure-60621ef.patch
@@ -0,0 +1,133 @@
+diff --git a/src/tools/qdatastream.cpp b/src/tools/qdatastream.cpp
+index dfdc20e..2cdd5f7 100644
+--- a/src/tools/qdatastream.cpp
++++ b/src/tools/qdatastream.cpp
+@@ -544,7 +544,10 @@ QDataStream &QDataStream::operator>>( Q_INT8 &i )
+ i = (buf[2] & 0x07)+((buf[1] & 0x07) << 3)+((buf[0] & 0x07) << 6);
+ }
+ } else { // data or text
+- i = (Q_INT8)dev->getch();
++ int ret = dev->getch();
++ if (ret >= 0) {
++ i = (Q_INT8)ret;
++ }
+ }
+ return *this;
+ }
+@@ -574,9 +577,10 @@ QDataStream &QDataStream::operator>>( Q_INT16 &i )
+ } else { // swap bytes
+ register uchar *p = (uchar *)(&i);
+ char b[2];
+- dev->readBlock( b, 2 );
+- *p++ = b[1];
+- *p = b[0];
++ if (dev->readBlock( b, 2 ) >= 2) {
++ *p++ = b[1];
++ *p = b[0];
++ }
+ }
+ return *this;
+ }
+@@ -606,11 +610,12 @@ QDataStream &QDataStream::operator>>( Q_INT32 &i )
+ } else { // swap bytes
+ uchar *p = (uchar *)(&i);
+ char b[4];
+- dev->readBlock( b, 4 );
+- *p++ = b[3];
+- *p++ = b[2];
+- *p++ = b[1];
+- *p = b[0];
++ if (dev->readBlock( b, 4 ) >= 4) {
++ *p++ = b[3];
++ *p++ = b[2];
++ *p++ = b[1];
++ *p = b[0];
++ }
+ }
+ return *this;
+ }
+@@ -643,15 +648,16 @@ QDataStream &QDataStream::operator>>( Q_INT64 &i )
+ } else { // swap bytes
+ uchar *p = (uchar *)(&i);
+ char b[8];
+- dev->readBlock( b, 8 );
+- *p++ = b[7];
+- *p++ = b[6];
+- *p++ = b[5];
+- *p++ = b[4];
+- *p++ = b[3];
+- *p++ = b[2];
+- *p++ = b[1];
+- *p = b[0];
++ if (dev->readBlock( b, 8 ) >= 8) {
++ *p++ = b[7];
++ *p++ = b[6];
++ *p++ = b[5];
++ *p++ = b[4];
++ *p++ = b[3];
++ *p++ = b[2];
++ *p++ = b[1];
++ *p = b[0];
++ }
+ }
+ return *this;
+ }
+@@ -683,9 +689,11 @@ QDataStream &QDataStream::operator>>( Q_LONG &i )
+ } else { // swap bytes
+ register uchar *p = (uchar *)(&i);
+ char b[sizeof(Q_LONG)];
+- dev->readBlock( b, sizeof(Q_LONG) );
+- for ( int j = sizeof(Q_LONG); j; )
+- *p++ = b[--j];
++ if (dev->readBlock( b, sizeof(Q_LONG) ) >= (int)sizeof(Q_LONG)) {
++ for ( int j = sizeof(Q_LONG); j; ) {
++ *p++ = b[--j];
++ }
++ }
+ }
+ return *this;
+ }
+@@ -724,11 +732,12 @@ QDataStream &QDataStream::operator>>( float &f )
+ } else { // swap bytes
+ uchar *p = (uchar *)(&f);
+ char b[4];
+- dev->readBlock( b, 4 );
+- *p++ = b[3];
+- *p++ = b[2];
+- *p++ = b[1];
+- *p = b[0];
++ if (dev->readBlock( b, 4 ) >= 4) {
++ *p++ = b[3];
++ *p++ = b[2];
++ *p++ = b[1];
++ *p = b[0];
++ }
+ }
+ return *this;
+ }
+@@ -752,15 +761,16 @@ QDataStream &QDataStream::operator>>( double &f )
+ } else { // swap bytes
+ register uchar *p = (uchar *)(&f);
+ char b[8];
+- dev->readBlock( b, 8 );
+- *p++ = b[7];
+- *p++ = b[6];
+- *p++ = b[5];
+- *p++ = b[4];
+- *p++ = b[3];
+- *p++ = b[2];
+- *p++ = b[1];
+- *p = b[0];
++ if (dev->readBlock( b, 8 ) >= 8) {
++ *p++ = b[7];
++ *p++ = b[6];
++ *p++ = b[5];
++ *p++ = b[4];
++ *p++ = b[3];
++ *p++ = b[2];
++ *p++ = b[1];
++ *p = b[0];
++ }
+ }
+ return *this;
+ }