------- You are receiving this mail because: ------- You are the assignee for the bug, or are watching the assignee. http://bugs.kde.org/show_bug.cgi?id=88788 Summary: [TESTCASE] kate crash opening binary file (and possible qt fix?) Product: kate Version: unspecified Platform: Compiled Sources OS/Version: Linux Status: UNCONFIRMED Severity: crash Priority: NOR Component: general AssignedTo: kwrite-devel kde org ReportedBy: g.guidi sns it Version: (using KDE Devel) Installed from: Compiled sources Opening this binary file: (and others) http://bugs.gentoo.org/attachment.cgi?id=38754&action=view and setting the encoding to iso8859-15 causes a crash with the following backtrace: #5 0x40f73db0 in QLatin15Codec::toUnicode(char const*, int) const () from /usr/qt/3/lib/libqt-mt.so.3 #6 0x40f7153f in QTextStatelessDecoder::toUnicode(char const*, int) () from /usr/qt/3/lib/libqt-mt.so.3 #7 0x41bf5564 in KateFileLoader::readLine() (this=0xbfffd600) at katebuffer.cpp:165 #8 0x41bf239b in KateBufBlock::fillBlock(KateFileLoader*) (this=0x81f69c0, stream=0xbfffd600) at katebuffer.cpp:1123 #9 0x41bf2143 in KateBufBlock (this=0x81f69c0, parent=0xffffff5c, prev=0x0, next=0xffffff5c, stream=0xbfffd600) at katebuffer.cpp:1071 #10 0x41bf0042 in KateBuffer::openFile(QString const&) (this=0x81aad10, m_file= 0x81f69c0) at katebuffer.cpp:437 For reference, the QLatin15Codec::toUnicode function is here: QString QLatin15Codec::toUnicode(const char* chars, int len) const { if ( chars == 0 ) return QString::null; QString str = QString::fromLatin1(chars, len); QChar *uc = (QChar *)str.unicode(); while( len-- ) { switch( uc->unicode() ) { case 0xa4: *uc = 0x20ac; break; [...] case 0xbe: *uc = 0x0178; break; default: break; } uc++; } return str; } Just to know if I get it correctly: kate reads files in chunks and stores them in a QString, so it is expected that when the chunk is from a binary file and contains a '\0' character, the QString is truncated and large part of the data is lost. (This is ok, even if I don't understand why it does happen with QString::fromLatin1 () but not when using QString::fromUtf8() ). But maybe the following patch (against qt-3.3.2) should be sent to Qt to avoid the crash? (tested a bit and seems to work) --- src/codecs/qtextcodec.cpp.orig 2004-09-03 19:46:26.782326976 +0200 +++ src/codecs/qtextcodec.cpp 2004-09-03 19:46:55.388978104 +0200 @ -2541,6 +2541,7 @ QString str = QString::fromLatin1(chars, len); QChar *uc = (QChar *)str.unicode(); + len = str.length(); while( len-- ) { switch( uc->unicode() ) { case 0xa4: _______________________________________________ KWrite-Devel mailing list KWrite-Devel@kde.org https://mail.kde.org/mailman/listinfo/kwrite-devel