QDataStream: use qint64 to represent size while reading and writing
Do that to avoid narrowing at the call site on 32-bit platforms. Amends fd48ce0b73c74dafd5db27bc1f2752ef665df7ef Found in 6.7 API review Change-Id: I31142399385521d973b2ed3789745569e44d5d63 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com> (cherry picked from commit 0ed34d19926c60f3b74a58723c5c36f366e99d95) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
7d0578b11f
commit
cc1476c608
@ -708,9 +708,9 @@ bool QDateTime::precedes(const QDateTime &other) const
|
||||
|
||||
QDataStream &QDataStream::readBytes(char *&s, uint &l)
|
||||
{
|
||||
qsizetype length = 0;
|
||||
qint64 length = 0;
|
||||
(void)readBytes(s, length);
|
||||
if (length != qsizetype(uint(length))) {
|
||||
if (length != qint64(uint(length))) {
|
||||
setStatus(ReadCorruptData); // Cannot store length in l
|
||||
delete[] s;
|
||||
l = 0;
|
||||
@ -722,12 +722,7 @@ QDataStream &QDataStream::readBytes(char *&s, uint &l)
|
||||
|
||||
QDataStream &QDataStream::writeBytes(const char *s, uint len)
|
||||
{
|
||||
qsizetype length = qsizetype(len);
|
||||
if (length < 0) {
|
||||
setStatus(WriteFailed);
|
||||
return *this;
|
||||
}
|
||||
return writeBytes(s, length);
|
||||
return writeBytes(s, qint64(len));
|
||||
}
|
||||
|
||||
int QDataStream::skipRawData(int len)
|
||||
@ -735,25 +730,21 @@ int QDataStream::skipRawData(int len)
|
||||
return int(skipRawData(qint64(len)));
|
||||
}
|
||||
|
||||
#if QT_POINTER_SIZE != 4
|
||||
|
||||
int QDataStream::readBlock(char *data, int len)
|
||||
{
|
||||
return int(readBlock(data, qsizetype(len)));
|
||||
return int(readBlock(data, qint64(len)));
|
||||
}
|
||||
|
||||
int QDataStream::readRawData(char *s, int len)
|
||||
{
|
||||
return int(readRawData(s, qsizetype(len)));
|
||||
return int(readRawData(s, qint64(len)));
|
||||
}
|
||||
|
||||
int QDataStream::writeRawData(const char *s, int len)
|
||||
{
|
||||
return writeRawData(s, qsizetype(len));
|
||||
return writeRawData(s, qint64(len));
|
||||
}
|
||||
|
||||
#endif // QT_POINTER_SIZE != 4
|
||||
|
||||
#if defined(Q_OS_ANDROID)
|
||||
|
||||
#include "qjniobject.h"
|
||||
|
@ -757,13 +757,13 @@ bool QDataStream::isDeviceTransactionStarted() const
|
||||
\internal
|
||||
*/
|
||||
|
||||
qsizetype QDataStream::readBlock(char *data, qsizetype len)
|
||||
qint64 QDataStream::readBlock(char *data, qint64 len)
|
||||
{
|
||||
// Disable reads on failure in transacted stream
|
||||
if (q_status != Ok && dev->isTransactionStarted())
|
||||
return -1;
|
||||
|
||||
const qsizetype readResult = dev->read(data, len);
|
||||
const qint64 readResult = dev->read(data, len);
|
||||
if (readResult != len)
|
||||
setStatus(ReadPastEnd);
|
||||
return readResult;
|
||||
@ -1002,7 +1002,7 @@ QDataStream &QDataStream::operator>>(double &f)
|
||||
|
||||
QDataStream &QDataStream::operator>>(char *&s)
|
||||
{
|
||||
qsizetype len = 0;
|
||||
qint64 len = 0;
|
||||
return readBytes(s, len);
|
||||
}
|
||||
|
||||
@ -1057,7 +1057,7 @@ QDataStream &QDataStream::operator>>(char32_t &c)
|
||||
\sa readRawData(), writeBytes()
|
||||
*/
|
||||
|
||||
QDataStream &QDataStream::readBytes(char *&s, qsizetype &l)
|
||||
QDataStream &QDataStream::readBytes(char *&s, qint64 &l)
|
||||
{
|
||||
s = nullptr;
|
||||
l = 0;
|
||||
@ -1069,7 +1069,7 @@ QDataStream &QDataStream::readBytes(char *&s, qsizetype &l)
|
||||
|
||||
qsizetype len = qsizetype(length);
|
||||
if (length != len || length < 0) {
|
||||
setStatus(SizeLimitExceeded); // Cannot store len in l
|
||||
setStatus(SizeLimitExceeded); // Cannot store len
|
||||
return *this;
|
||||
}
|
||||
|
||||
@ -1108,7 +1108,7 @@ QDataStream &QDataStream::readBytes(char *&s, qsizetype &l)
|
||||
\sa readBytes(), QIODevice::read(), writeRawData()
|
||||
*/
|
||||
|
||||
qsizetype QDataStream::readRawData(char *s, qsizetype len)
|
||||
qint64 QDataStream::readRawData(char *s, qint64 len)
|
||||
{
|
||||
CHECK_STREAM_PRECOND(-1)
|
||||
return readBlock(s, len);
|
||||
@ -1389,7 +1389,7 @@ QDataStream &QDataStream::operator<<(char32_t c)
|
||||
\sa writeRawData(), readBytes()
|
||||
*/
|
||||
|
||||
QDataStream &QDataStream::writeBytes(const char *s, qsizetype len)
|
||||
QDataStream &QDataStream::writeBytes(const char *s, qint64 len)
|
||||
{
|
||||
if (len < 0) {
|
||||
q_status = WriteFailed;
|
||||
@ -1410,10 +1410,10 @@ QDataStream &QDataStream::writeBytes(const char *s, qsizetype len)
|
||||
\sa writeBytes(), QIODevice::write(), readRawData()
|
||||
*/
|
||||
|
||||
qsizetype QDataStream::writeRawData(const char *s, qsizetype len)
|
||||
qint64 QDataStream::writeRawData(const char *s, qint64 len)
|
||||
{
|
||||
CHECK_STREAM_WRITE_PRECOND(-1)
|
||||
qsizetype ret = dev->write(s, len);
|
||||
qint64 ret = dev->write(s, len);
|
||||
if (ret != len)
|
||||
q_status = WriteFailed;
|
||||
return ret;
|
||||
|
@ -180,15 +180,13 @@ public:
|
||||
QDataStream &readBytes(char *&, uint &len);
|
||||
QDataStream &writeBytes(const char *, uint len);
|
||||
int skipRawData(int len);
|
||||
#endif
|
||||
#if QT_CORE_REMOVED_SINCE(6, 7) && QT_POINTER_SIZE != 4
|
||||
int readRawData(char *, int len);
|
||||
int writeRawData(const char *, int len);
|
||||
#endif
|
||||
QDataStream &readBytes(char *&, qsizetype &len);
|
||||
qsizetype readRawData(char *, qsizetype len);
|
||||
QDataStream &writeBytes(const char *, qsizetype len);
|
||||
qsizetype writeRawData(const char *, qsizetype len);
|
||||
QDataStream &readBytes(char *&, qint64 &len);
|
||||
qint64 readRawData(char *, qint64 len);
|
||||
QDataStream &writeBytes(const char *, qint64 len);
|
||||
qint64 writeRawData(const char *, qint64 len);
|
||||
qint64 skipRawData(qint64 len);
|
||||
|
||||
void startTransaction();
|
||||
@ -208,10 +206,10 @@ private:
|
||||
ByteOrder byteorder;
|
||||
int ver;
|
||||
Status q_status;
|
||||
#if QT_CORE_REMOVED_SINCE(6, 7) && QT_POINTER_SIZE != 4
|
||||
#if QT_CORE_REMOVED_SINCE(6, 7)
|
||||
int readBlock(char *data, int len);
|
||||
#endif
|
||||
qsizetype readBlock(char *data, qsizetype len);
|
||||
qint64 readBlock(char *data, qint64 len);
|
||||
static inline qint64 readQSizeType(QDataStream &s);
|
||||
static inline void writeQSizeType(QDataStream &s, qint64 value);
|
||||
enum class QDataStreamSizes : quint32 { NullCode = 0xffffffffu, ExtendedSize = 0xfffffffeu };
|
||||
|
@ -2818,10 +2818,10 @@ void tst_QDataStream::status_charptr_QByteArray()
|
||||
{
|
||||
QDataStream stream(&data, QIODevice::ReadOnly);
|
||||
char *buf;
|
||||
qsizetype len;
|
||||
qint64 len;
|
||||
stream.readBytes(buf, len);
|
||||
|
||||
QCOMPARE(len, expectedString.size());
|
||||
QCOMPARE(len, qint64(expectedString.size()));
|
||||
QCOMPARE(QByteArray(buf, len), expectedString);
|
||||
QCOMPARE(int(stream.status()), expectedStatus);
|
||||
delete [] buf;
|
||||
|
Loading…
x
Reference in New Issue
Block a user