summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qdatastream.cpp
diff options
context:
space:
mode:
authorChristian Strømme <christian.stromme@digia.com>2012-11-23 12:29:36 (GMT)
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-28 12:29:35 (GMT)
commite2f600de9553168b3eb4fcbd1d4c523a91ee33ef (patch)
tree3752f7c44f436ba1808615e15ca5030022a0610d /src/corelib/io/qdatastream.cpp
parentc6e3cea94c2b36aebb76b90b8354a04caa2f9c60 (diff)
downloadQt-e2f600de9553168b3eb4fcbd1d4c523a91ee33ef.zip
Qt-e2f600de9553168b3eb4fcbd1d4c523a91ee33ef.tar.gz
Qt-e2f600de9553168b3eb4fcbd1d4c523a91ee33ef.tar.bz2
Fixes problem with single precision floats in QDataStream (Windows).
When the floating-point behavior in MSVC is set to "precise" (default), assigning nan numbers to a float causes the bit pattern to be altered (only affects 32bit builds). We should therefore not assign the swapped value back to a float and use it. Backported from Qt 5 (3f936e9094f3a6e4d76791c1eff7ae92f91b61ae) Task-number: QTBUG-25950 Change-Id: I39725557ab89c978eb1c59a4c79df8a27ed70ecf Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Diffstat (limited to 'src/corelib/io/qdatastream.cpp')
-rw-r--r--src/corelib/io/qdatastream.cpp6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp
index 2e5a406..8b23479 100644
--- a/src/corelib/io/qdatastream.cpp
+++ b/src/corelib/io/qdatastream.cpp
@@ -1132,8 +1132,12 @@ QDataStream &QDataStream::operator<<(float f)
} x;
x.val1 = g;
x.val2 = qbswap(x.val2);
- g = x.val1;
+
+ if (dev->write((char *)&x.val2, sizeof(float)) != sizeof(float))
+ q_status = WriteFailed;
+ return *this;
}
+
if (dev->write((char *)&g, sizeof(float)) != sizeof(float))
q_status = WriteFailed;
return *this;