diff options
author | Christian Strømme <christian.stromme@digia.com> | 2012-11-13 19:17:17 +0100 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2012-11-23 02:32:19 +0100 |
commit | 3f936e9094f3a6e4d76791c1eff7ae92f91b61ae (patch) | |
tree | d4eb081fc8f3d50fab7cf6b624b65b3380af41fc /src/corelib/io/qdatastream.cpp | |
parent | dc2fd227abe2508f2c8329623c4342800a107147 (diff) |
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.
Task-number: QTBUG-25950
Change-Id: I7b6cc4d546e5c8aeafdede749056358b7d639ec7
Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@digia.com>
Diffstat (limited to 'src/corelib/io/qdatastream.cpp')
-rw-r--r-- | src/corelib/io/qdatastream.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp index 9a71f60854..5e5e155534 100644 --- a/src/corelib/io/qdatastream.cpp +++ b/src/corelib/io/qdatastream.cpp @@ -1046,8 +1046,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; |