From 817e47fbcde21ab54d353efd647685159cb437a9 Mon Sep 17 00:00:00 2001 From: Marc Mutz Date: Wed, 17 Aug 2022 13:19:10 +0200 Subject: [PATCH] QBuffer: fix the setData() API re: int/qsizetype MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The setData(ptr, n) overload was still taking the size as int. Widen it. Task-number: QTBUG-103525 Change-Id: If1d6d6404d62bbae5e0defea9a2115648c1fd5da Reviewed-by: MÃ¥rten Nordheim Reviewed-by: Sona Kurazyan --- src/corelib/compat/removed_api.cpp | 2 ++ src/corelib/io/qbuffer.cpp | 5 ++++- src/corelib/io/qbuffer.h | 9 +++++---- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/corelib/compat/removed_api.cpp b/src/corelib/compat/removed_api.cpp index aa1a496f0f6..42f2ef97ea7 100644 --- a/src/corelib/compat/removed_api.cpp +++ b/src/corelib/compat/removed_api.cpp @@ -285,6 +285,8 @@ QT_WARNING_POP #if QT_CORE_REMOVED_SINCE(6, 5) +#include "qbuffer.h" // inline removed API + #include "qenvironmentvariables.h" bool qputenv(const char *varName, const QByteArray &value) diff --git a/src/corelib/io/qbuffer.cpp b/src/corelib/io/qbuffer.cpp index c244dacab3d..0dcc02459da 100644 --- a/src/corelib/io/qbuffer.cpp +++ b/src/corelib/io/qbuffer.cpp @@ -267,12 +267,15 @@ void QBuffer::setData(const QByteArray &data) } /*! - \fn void QBuffer::setData(const char *data, int size) + \fn void QBuffer::setData(const char *data, qsizetype size) \overload Sets the contents of the internal buffer to be the first \a size bytes of \a data. + + \note In Qt versions prior to 6.5, this function took the length as + an \c{int} parameter, potentially truncating sizes. */ /*! diff --git a/src/corelib/io/qbuffer.h b/src/corelib/io/qbuffer.h index 96144b63a84..a7c6bde562a 100644 --- a/src/corelib/io/qbuffer.h +++ b/src/corelib/io/qbuffer.h @@ -33,7 +33,11 @@ public: void setBuffer(QByteArray *a); void setData(const QByteArray &data); - inline void setData(const char *data, int len); +#if QT_CORE_REMOVED_SINCE(6, 5) && QT_POINTER_SIZE != 4 + void setData(const char *data, int len) { setData(data, qsizetype(len)); } +#endif + void setData(const char *data, qsizetype len) + { setData(QByteArray(data, len)); } const QByteArray &data() const; bool open(OpenMode openMode) override; @@ -60,9 +64,6 @@ private: Q_PRIVATE_SLOT(d_func(), void _q_emitSignals()) }; -inline void QBuffer::setData(const char *adata, int alen) -{ setData(QByteArray(adata, alen)); } - QT_END_NAMESPACE #endif // QBUFFER_H