Bug 203583 - segfault when using encoding ucs2/utf16
Summary: segfault when using encoding ucs2/utf16
Status: RESOLVED FIXED
Alias: None
Product: konversation
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: openSUSE Linux
: NOR crash
Target Milestone: ---
Assignee: Konversation Developers
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2009-08-12 17:18 UTC by Johannes E. Krause
Modified: 2009-08-12 22:36 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Johannes E. Krause 2009-08-12 17:18:19 UTC
Version:            (using KDE 4.3.0)
OS:                Linux
Installed from:    SuSE RPMs

Konversation crashed after switching the encoding to ucs2/utf16, and then sending some text

the text i sent was "äöü"

crashlog:
Application: Konversation (konversation), signal: Segmentation fault
[Current thread is 0 (LWP 12196)]

Thread 2 (Thread 0xb3575b90 (LWP 12200)):
#0  0xffffe430 in __kernel_vsyscall ()
#1  0xb6b2ac15 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/libpthread.so.0
#2  0xb6b885a2 in QWaitCondition::wait () from /usr/lib/libQtCore.so.4
#3  0xb74b71f2 in ?? () from /usr/lib/libQtNetwork.so.4
#4  0xb6b87592 in ?? () from /usr/lib/libQtCore.so.4
#5  0xb6b27175 in start_thread () from /lib/libpthread.so.0
#6  0xb6006dae in clone () from /lib/libc.so.6

Thread 1 (Thread 0xb56a16d0 (LWP 12196)):
[KCrash Handler]
#5  0x08139396 in Konversation::OutputFilter::checkForEncodingConflict ()
#6  0x08145fa0 in Konversation::OutputFilter::parse ()
#7  0x080ef521 in Channel::sendChannelText ()
#8  0x080f2937 in Channel::channelTextEntered ()
#9  0x080fda4d in Channel::qt_metacall ()
#10 0xb6c90e08 in QMetaObject::activate () from /usr/lib/libQtCore.so.4
#11 0xb6c91a92 in QMetaObject::activate () from /usr/lib/libQtCore.so.4
#12 0x08159709 in IRCInput::submit ()
#13 0x0815b337 in IRCInput::keyPressEvent ()
#14 0xb6318363 in QWidget::event () from /usr/lib/libQtGui.so.4
#15 0xb66a9ad3 in QFrame::event () from /usr/lib/libQtGui.so.4
#16 0xb674aa7d in QAbstractScrollArea::event () from /usr/lib/libQtGui.so.4
#17 0xb673422e in QTextEdit::event () from /usr/lib/libQtGui.so.4
#18 0xb734a3f3 in KTextEdit::event () from /usr/lib/libkdeui.so.5
#19 0x08159998 in IRCInput::event ()
#20 0xb62c16ac in QApplicationPrivate::notify_helper () from /usr/lib/libQtGui.so.4
#21 0xb62caa8b in QApplication::notify () from /usr/lib/libQtGui.so.4
#22 0xb723a31d in KApplication::notify () from /usr/lib/libkdeui.so.5
#23 0xb6c7b6cb in QCoreApplication::notifyInternal () from /usr/lib/libQtCore.so.4
#24 0xb62c259e in ?? () from /usr/lib/libQtGui.so.4
#25 0xb635ea80 in ?? () from /usr/lib/libQtGui.so.4
#26 0xb6360c4e in ?? () from /usr/lib/libQtGui.so.4
#27 0xb6337ae4 in QApplication::x11ProcessEvent () from /usr/lib/libQtGui.so.4
#28 0xb63626ec in ?? () from /usr/lib/libQtGui.so.4
#29 0xb5bf52f9 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#30 0xb5bf887b in ?? () from /usr/lib/libglib-2.0.so.0
#31 0xb5bf89f8 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#32 0xb6ca7008 in QEventDispatcherGlib::processEvents () from /usr/lib/libQtCore.so.4
#33 0xb6361db5 in ?? () from /usr/lib/libQtGui.so.4
#34 0xb6c79d0a in QEventLoop::processEvents () from /usr/lib/libQtCore.so.4
#35 0xb6c7a152 in QEventLoop::exec () from /usr/lib/libQtCore.so.4
#36 0xb6c7c5d9 in QCoreApplication::exec () from /usr/lib/libQtCore.so.4
#37 0xb62c1527 in QApplication::exec () from /usr/lib/libQtGui.so.4
#38 0x080a0df2 in main ()
Comment 1 Johannes E. Krause 2009-08-12 17:20:44 UTC
> konversation --version
Qt: 4.5.3
KDE: 4.3.63 (KDE 4.3.63 (KDE 4.4 >= 20090805)) "release 2"
Konversation: 1.2-alpha6
Comment 2 Travis McHenry 2009-08-12 19:04:12 UTC
I can confirm this. By reverting the imporoper codec warning dialog it still crashes. The following is a better backtrace than the above (with the warning dialog reverted):

Application: Konversation (konversation), signal: Segmentation fault
[Current thread is 0 (LWP 24309)]

Thread 2 (Thread 0xb34d7b90 (LWP 24311)):
#0  0xb7f51430 in __kernel_vsyscall ()
#1  0xb5cb70e5 in pthread_cond_wait@@GLIBC_2.3.2 () from /lib/tls/i686/cmov/libpthread.so.0
#2  0xb601f2ed in pthread_cond_wait () from /lib/tls/i686/cmov/libc.so.6
#3  0xb6baa172 in QWaitCondition::wait (this=0xa1e7d28, mutex=0xa1e7d24, time=4294967295) at thread/qwaitcondition_unix.cpp:87
#4  0xb74ceac2 in QHostInfoAgent::run (this=0xa1e7d18) at kernel/qhostinfo.cpp:260
#5  0xb6ba9132 in QThreadPrivate::start (arg=0xa1e7d18) at thread/qthread_unix.cpp:188
#6  0xb5cb34ff in start_thread () from /lib/tls/i686/cmov/libpthread.so.0
#7  0xb601049e in clone () from /lib/tls/i686/cmov/libc.so.6

Thread 1 (Thread 0xb56af700 (LWP 24309)):
[KCrash Handler]
#6  QTextCodec::fromUnicode (this=0x0, str=@0xbf96ba18) at codecs/qtextcodec.cpp:1189
#7  0x080d5281 in Server::_send_internal (this=0xa10f8c8, outputLine=
      {static null = {<No data fields>}, static shared_null = {ref = {_q_value = 8951}, alloc = 0, size = 0, data = 0x826b822, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, static shared_empty = {ref = {_q_value = 261}, alloc = 0, size = 0, data = 0xb6d9146e, clean = 0, simpletext = 0, righttoleft = 0, asciiCache = 0, capacity = 0, reserved = 0, array = {0}}, d = 0xbf96ba18, static codecForCStrings = 0x0}) at /home/word/Packages/konvi-test/src/irc/server.cpp:1174
#8  0x080d5c0f in Server::toServer (this=0xa10f8c8, s=@0xbf96ba48, q=0x9e9bc48) at /home/word/Packages/konvi-test/src/irc/server.cpp:1232
#9  0x081485ed in IRCQueue::doSend (this=0x9e9bc48) at /home/word/Packages/konvi-test/src/irc/ircqueue.cpp:172
#10 0x08148632 in IRCQueue::sendNow (this=0x9e9bc48) at /home/word/Packages/konvi-test/src/irc/ircqueue.cpp:195
#11 0x081486f0 in IRCQueue::qt_metacall (this=0x9e9bc48, _c=QMetaObject::InvokeMetaMethod, _id=-1080641000, _a=0xbf96bb08) at /home/word/Packages/konvi-test/build/src/ircqueue.moc:71
#12 0xb6cb31b8 in QMetaObject::activate (sender=0xa10f448, from_signal_index=4, to_signal_index=4, argv=0x0) at kernel/qobject.cpp:3113
#13 0xb6cb3e42 in QMetaObject::activate (sender=0xa10f448, m=0xb6d90904, local_signal_index=0, argv=0x0) at kernel/qobject.cpp:3187
#14 0xb6cef687 in QTimer::timeout (this=0xa10f448) at .moc/release-shared/moc_qtimer.cpp:128
#15 0xb6cb95ce in QTimer::timerEvent (this=0xa10f448, e=0xbf96bf8c) at kernel/qtimer.cpp:261
#16 0xb6cae16f in QObject::event (this=0xa10f448, e=0xbf96bf8c) at kernel/qobject.cpp:1075
#17 0xb62d4d3c in QApplicationPrivate::notify_helper (this=0x9dae568, receiver=0xa10f448, e=0xbf96bf8c) at kernel/qapplication.cpp:4056
#18 0xb62dd03e in QApplication::notify (this=0xbf96c220, receiver=0xa10f448, e=0xbf96bf8c) at kernel/qapplication.cpp:3603
#19 0xb72525cd in KApplication::notify (this=0xbf96c220, receiver=0xa10f448, event=0xbf96bf8c) at /build/buildd/kde4libs-4.3.0/kdeui/kernel/kapplication.cpp:302
#20 0xb6c9dbcb in QCoreApplication::notifyInternal (this=0xbf96c220, receiver=0xa10f448, event=0xbf96bf8c) at kernel/qcoreapplication.cpp:610
#21 0xb6cccd51 in QTimerInfoList::activateTimers (this=0x9db06b4) at ../../include/QtCore/../../src/corelib/kernel/qcoreapplication.h:213
#22 0xb6cc93a0 in timerSourceDispatch (source=0x9db0680) at kernel/qeventdispatcher_glib.cpp:165
#23 0xb5b87b88 in g_main_context_dispatch () from /usr/lib/libglib-2.0.so.0
#24 0xb5b8b0eb in ?? () from /usr/lib/libglib-2.0.so.0
#25 0xb5b8b268 in g_main_context_iteration () from /usr/lib/libglib-2.0.so.0
#26 0xb6cc92f8 in QEventDispatcherGlib::processEvents (this=0x9d8ccd8, flags={i = -1080639224}) at kernel/qeventdispatcher_glib.cpp:327
#27 0xb6376a75 in QGuiEventDispatcherGlib::processEvents (this=0x9d8ccd8, flags={i = -1080639176}) at kernel/qguieventdispatcher_glib.cpp:202
#28 0xb6c9c1fa in QEventLoop::processEvents (this=0xbf96c1b0, flags={i = -1080639112}) at kernel/qeventloop.cpp:149
#29 0xb6c9c642 in QEventLoop::exec (this=0xbf96c1b0, flags={i = -1080639048}) at kernel/qeventloop.cpp:201
#30 0xb6c9eae9 in QCoreApplication::exec () at kernel/qcoreapplication.cpp:888
#31 0xb62d4bb7 in QApplication::exec () at kernel/qapplication.cpp:3525
#32 0x080a0c92 in main (argc=3, argv=0xbf96c5e4) at /home/word/Packages/konvi-test/src/main.cpp:101
Comment 3 Travis McHenry 2009-08-12 22:36:50 UTC
SVN commit 1010563 by tjmchenry:

Use isChecked in channellistpanel instead of checkedState() *facepalm*

Remove ucs2 because it's a duplicate of UTF-16

Because utf-16 is already removed, during the shortname->codec conversion
no codec is found for ucs2, resulting in a null codec, and a crash.

I tried to protect the pointer so this doesn't happen in the future..lemme know if i embarassed myself
BUG:203583

 M  +3 -3      channellistpanel.cpp  
 M  +2 -0      irccharsets.cpp  
 M  +7 -3      outputfilter.cpp  
 M  +9 -3      server.cpp  


WebSVN link: http://websvn.kde.org/?view=rev&revision=1010563