Bug in QBitArray

Alles rund um die Programmierung mit Qt
Antworten
tilo
Beiträge: 3
Registriert: 4. November 2009 21:32
Wohnort: Berlin

Bug in QBitArray

Beitrag von tilo »

Hi,

mir ist ein Problem aufgefallen, dass nur eintritt, wenn folgende Bedingungen erfüllt sind:
1. wenn man ein QBitArray verkleinert auf ein nicht durch 8 teilbaren Wert, d.h. es sind überzählige Bits im letzten Byte
2. es mind. 1 dieser überzähligen Bits vorher gesetzt war
3. das QBitArray über ein QDataStream neu gelesen wird
tritt offensichtlich ein Lesefehler auf und man erhält ein QBitArray der Größe 0.
Der folgende Code verdeutlicht dies:

Code: Alles auswählen

    QBitArray ba_1(20, true), ba_2;
    QBuffer buffer;
    buffer.open(QBuffer::ReadWrite);
    QDataStream stream(&buffer);
    ba_1.resize(ba_1.size()-1);
    stream << ba_1;
    buffer.seek(0);
    stream >> ba_2;
    qDebug() << ba_2.size();
Die überzähligen Bits bleiben auch nach einer Zuweisung oder Neuerzeugung (ba_2 = ba_1 bzw. QBitArray ba_2(ba_1) ) erhalten. Dieses Problem lässt sich umgehen, indem man vor dem resize() (oder truncate() ) alle überzähligen Bits löscht, z.B. mit:
fill( false, newSize, oldSize)

Wie gesagt, Probleme treten erst nach dem Auslesen aus einem Stream auf (z.B. aus Datei lesen), sonst sind oben besagte Bits nicht relevant.
Ich hoffe, ich hab nix übersehen - vielen Dank für Hinweise im Vorraus
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Dieses Forum ist in PHP programmiert und verwendet kein QBitArray...
AuE
Beiträge: 918
Registriert: 5. August 2008 10:58

Beitrag von AuE »

rofl
tilo
Beiträge: 3
Registriert: 4. November 2009 21:32
Wohnort: Berlin

Beitrag von tilo »

upsala hat geschrieben:Dieses Forum ist in PHP programmiert und verwendet kein QBitArray...
???
das ist doch qtforum.de, oder?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

tilo hat geschrieben:
upsala hat geschrieben:Dieses Forum ist in PHP programmiert und verwendet kein QBitArray...
???
das ist doch qtforum.de, oder?
Aber er war im Unterforum 'Das Forum' ...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
neuschi
Beiträge: 78
Registriert: 23. Mai 2007 10:59

Beitrag von neuschi »

Das sieht tatsächlich nach einem Qt-Bug aus, und zwar in

Code: Alles auswählen

QDataStream &operator>>(QDataStream &in, QBitArray &ba)
Hier steht folgender Code:

Code: Alles auswählen

int paddingMask = ~((0x1 << (len & 0x7)) - 1);
if (paddingMask != ~0x0 && (ba.d.constData()[ba.d.size() - 1] & paddingMask)) {
        ba.clear();
        in.setStatus(QDataStream::ReadCorruptData);
        return in;
    }
In den if-Zweig geht er nur rein, wenn du in deinem Beispiel ba_1 mit true initialisierst.

Schick dein Beispiel doch mal an support@trolltech.com (kA, ob support@qt.nokia.com auch geht)

\Ralf
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

tilo
Beiträge: 3
Registriert: 4. November 2009 21:32
Wohnort: Berlin

Beitrag von tilo »

neuschi hat geschrieben:Das sieht tatsächlich nach einem Qt-Bug aus, und zwar in

Code: Alles auswählen

QDataStream &operator>>(QDataStream &in, QBitArray &ba)
Schick dein Beispiel doch mal an support@trolltech.com (kA, ob support@qt.nokia.com auch geht)

\Ralf
Danke für den Hinweis. Ich hab es einfach mal geschickt.
Tilo
Antworten