Details
-
Bug
-
Resolution: Done
-
P2: Important
-
6.0.4, 6.1.3, 6.2.5, 6.3.1, 6.4.0 Beta4
-
None
-
-
8
-
2fd990b386 (qt/qtbase/dev) 2fd990b386 (qt/tqtc-qtbase/dev) 93aa02e671 (qt/qtbase/6.4) 93aa02e671 (qt/tqtc-qtbase/6.4) 2a4d5b41cb (qt/tqtc-qtbase/6.2) 93aa02e671 (qt/tqtc-qtbase/6.4.1) 93aa02e671 (qt/tqtc-qtbase/tqtc/qtinsight-6.4)
-
Foundation Sprint 65, Foundation Sprint 66, Foundation Sprint 67, Foundation Sprint 68
Description
While working on QTBUG-104972, which fixed the most obvious problems with the widening of the functions from 32-bit to 64-bit-sized Qt containers, it turned out that, due to the zlib API using ulong as the size type, 64-bit Windows is unable to handle > 4GiB of (decompressed) data, because sizeof(ulong) is 32-bit on Windows. 64-bit Unix is unaffected, as sizeof(ulong) == 8 there.
To fix, instead of using the compress2() and uncompress() convenience functions, we can use zlib's the stream API (zstream/deflate()/inflate()) directly. Being a stream API, it should not be limited by the size of long.
Acceptance criteria:
- qCompress() can compress more than 4GiB of data on Windows-64
- qUncompress() can uncompress more than 4GiB of data on Windows-64
- functional benchmark for the above two is 64-bit Unix (post
QTBUG-104972) - the documentation, updated as part of
QTBUG-104972, is changed to reflect the removal of the Windows-64 limitation
Attachments
Issue Links
- resulted from
-
QTBUG-104972 qUncompress(qCompress()) round-trip fails for data > 2GiB
-
- Closed
-
- resulted in
-
QTBUG-107698 Improve output buffer estimation in qCompress()
-
- Open
-
For Gerrit Dashboard: QTBUG-106542 | ||||||
---|---|---|---|---|---|---|
# | Subject | Branch | Project | Status | CR | V |
433376,5 | DRY qCompress/qUncompress: introduce CompressedSizeHint_t | dev | qt/qtbase | Status: MERGED | +2 | 0 |
433377,13 | Port qUncompress() to zstream/inflate() | dev | qt/qtbase | Status: MERGED | +2 | 0 |
433807,6 | qUn/Compress: reject negative lengths | dev | qt/qtbase | Status: MERGED | +2 | 0 |
433809,7 | Port qCompress() to zstream/deflate() | dev | qt/qtbase | Status: MERGED | +2 | 0 |
433810,3 | tst_qbytearray: check compressing more than 4GiB of data | dev | qt/qtbase | Status: ABANDONED | -1 | 0 |
434228,7 | qCompress: return null, not empty, for OOM | dev | qt/qtbase | Status: MERGED | +2 | 0 |
434269,1 | DRY qCompress/qUncompress: introduce CompressedSizeHint_t | 6.3 | qt/qtbase | Status: ABANDONED | 0 | 0 |
434270,3 | DRY qCompress/qUncompress: introduce CompressedSizeHint_t | 6.4 | qt/qtbase | Status: MERGED | +2 | 0 |
434271,4 | DRY qCompress/qUncompress: introduce CompressedSizeHint_t | tqtc/lts-6.2 | qt/tqtc-qtbase | Status: MERGED | +2 | 0 |
434720,3 | qUn/Compress: reject negative lengths | 6.4 | qt/qtbase | Status: MERGED | +2 | 0 |
434721,1 | qUn/Compress: reject negative lengths | 6.3 | qt/qtbase | Status: ABANDONED | +2 | 0 |
434726,4 | qUn/Compress: reject negative lengths | tqtc/lts-6.2 | qt/tqtc-qtbase | Status: MERGED | +2 | 0 |
435031,1 | qCompress: return null, not empty, for OOM | 6.3 | qt/qtbase | Status: ABANDONED | +2 | 0 |
435032,3 | qCompress: return null, not empty, for OOM | 6.4 | qt/qtbase | Status: MERGED | +2 | 0 |
435035,4 | qCompress: return null, not empty, for OOM | tqtc/lts-6.2 | qt/tqtc-qtbase | Status: MERGED | +2 | 0 |
438416,3 | Port qUncompress() to zstream/inflate() | 6.4 | qt/qtbase | Status: MERGED | +2 | 0 |
438417,1 | Port qUncompress() to zstream/inflate() | 6.3 | qt/qtbase | Status: ABANDONED | 0 | 0 |
438498,4 | Port qUncompress() to zstream/inflate() | tqtc/lts-6.2 | qt/tqtc-qtbase | Status: MERGED | +2 | 0 |
438733,1 | Port qCompress() to zstream/deflate() | 6.3 | qt/qtbase | Status: ABANDONED | 0 | 0 |
438734,3 | Port qCompress() to zstream/deflate() | 6.4 | qt/qtbase | Status: MERGED | +2 | 0 |
438737,4 | Port qCompress() to zstream/deflate() | tqtc/lts-6.2 | qt/tqtc-qtbase | Status: MERGED | +2 | 0 |