diff options
| author | Ivan Solovev <ivan.solovev@qt.io> | 2024-01-29 11:57:37 +0100 |
|---|---|---|
| committer | Ivan Solovev <ivan.solovev@qt.io> | 2024-02-07 15:02:19 +0100 |
| commit | 0aaf7092cd077eb07e62d3742293f146c65c9630 (patch) | |
| tree | 6ac9767d33a34d592f8d5e0cbb97c87f17dccefb /src/corelib/serialization/qdatastream.cpp | |
| parent | be04a47a8b371a44b728f7b7a2be2f66749e562b (diff) | |
Fix QDataStream::operator<<(const char *) to handle 64-bit length
The operator was not converted to using a new streaming version, so it
supported only 32-bit length.
Fix it and add a manual test for serialization/deserialization of
large c-style strings.
Amends fd48ce0b73c74dafd5db27bc1f2752ef665df7ef
Pick-to: 6.7
Change-Id: I83704edec021d400b992de810feba5da52d5ffe1
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Diffstat (limited to 'src/corelib/serialization/qdatastream.cpp')
| -rw-r--r-- | src/corelib/serialization/qdatastream.cpp | 10 |
1 files changed, 3 insertions, 7 deletions
diff --git a/src/corelib/serialization/qdatastream.cpp b/src/corelib/serialization/qdatastream.cpp index fd550cf8bcf..dcfa292f154 100644 --- a/src/corelib/serialization/qdatastream.cpp +++ b/src/corelib/serialization/qdatastream.cpp @@ -1346,13 +1346,9 @@ QDataStream &QDataStream::operator<<(double f) QDataStream &QDataStream::operator<<(const char *s) { - if (!s) { - *this << (quint32)0; - return *this; - } - int len = int(qstrlen(s)) + 1; // also write null terminator - *this << (quint32)len; // write length specifier - writeRawData(s, len); + // Include null terminator, unless s itself is null + const qint64 len = s ? qint64(qstrlen(s)) + 1 : 0; + writeBytes(s, len); return *this; } |
