From 10f2b5aa66c95563702b02770df39c7cf1b2ef61 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 4 Oct 2017 21:20:01 -0700 Subject: QUdpSocket: make sure receiveDatagram() returns empty on error If the datagram reception failed, we forgot to set the buffer back to empty. The returned QNetworkDatagram did report isValid() == false, but it was possible to get the .data() and check its size, getting nonsense. Tests in the next commit. Change-Id: I638cf58bfa7b4e5fb386fffd14ea91adf2133d47 Reviewed-by: Jesus Fernandez Reviewed-by: Timur Pocheptsov Reviewed-by: Edward Welbourne --- src/network/socket/qudpsocket.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'src/network/socket') diff --git a/src/network/socket/qudpsocket.cpp b/src/network/socket/qudpsocket.cpp index 37b385dfb5..79629a07f2 100644 --- a/src/network/socket/qudpsocket.cpp +++ b/src/network/socket/qudpsocket.cpp @@ -454,10 +454,12 @@ QNetworkDatagram QUdpSocket::receiveDatagram(qint64 maxSize) QAbstractSocketEngine::WantAll); d->hasPendingData = false; d->socketEngine->setReadNotificationEnabled(true); - if (readBytes < 0) + if (readBytes < 0) { d->setErrorAndEmit(d->socketEngine->error(), d->socketEngine->errorString()); - else if (readBytes != result.d->data.size()) - result.d->data.truncate(readBytes); + readBytes = 0; + } + + result.d->data.truncate(readBytes); return result; } -- cgit v1.2.3