summaryrefslogtreecommitdiffstats
path: root/src/corelib/io/qdatastream.cpp
diff options
context:
space:
mode:
authorChristian Strømme <christian.stromme@digia.com>2012-11-13 19:17:17 +0100
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-11-23 02:32:19 +0100
commit3f936e9094f3a6e4d76791c1eff7ae92f91b61ae (patch)
treed4eb081fc8f3d50fab7cf6b624b65b3380af41fc /src/corelib/io/qdatastream.cpp
parentdc2fd227abe2508f2c8329623c4342800a107147 (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.cpp6
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;