Package: qt6-l10n-tools
Version: 6.11.2-2
Severity: normal
Tags: upstream
Control: affects -1 stellarium

stellarium builds die because of too low address space to process a 5MiB
.po file (po/CMakeLists.txt runs lconvert -i X.po -o X.qm. Qt's loadPO()
slurps the whole file): lines.append(dev.readLine().trimmed());

In Qt 6.11, QIODevice::readLineInto() (qtbase/src/corelib/io/qiodevice.cpp) 
does:

"""
line->resize(qsizetype(qMin(maxSize, 1 + readBytes + d->buffer.chunkSize())));
...
line->resize(readBytes);
"""

The buffer is never released.

chunkSize() is 32767, so every line allocates exactly 32768 bytes, and the final
shrink resize() keeps that capacity (Qt's QByteArray::resize() documents
"never shrinks capacity; use squeeze()").

trimmed() then returns *this (nothing left to trim) — a shared copy — so the
32 KiB block is retained in "lines" forever.

The ~5MiB file will use over 4GiB of memory to process. Qt5 is okay because that
built the same stellarium version on 32 bit systems successfully before.

I am not sure where to report it upstream, so I bring it up here.

Reply via email to