Bug 48114 - kword crashes after switching on spellcheck on a imported document
Summary: kword crashes after switching on spellcheck on a imported document
Status: RESOLVED FIXED
Alias: None
Product: kword
Classification: Miscellaneous
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: ---
Assignee: Thomas Zander
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2002-09-21 14:26 UTC by Frank Pieczynski
Modified: 2004-05-17 21:27 UTC (History)
0 users

See Also:
Latest Commit:
Version Fixed In:


Attachments
short document for reproduce the crash (3.68 KB, application/x-kword)
2002-09-21 14:29 UTC, Frank Pieczynski
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Frank Pieczynski 2002-09-21 14:26:31 UTC
Version:           koffice 1.2 final (using KDE Devel)
Installed from:    Compiled sources
Compiler:          gcc 2.95.2 
OS:          LinuxLinuxLinuxLinux

Hello,
today I run into a crash with kword ans spell check.
The document comes from a imported document, it was originally saved
in MS word as rtf. After switching Tolls->Spellcheck->Autospellcheck
on kword crashes.
I deleted lot's of text from the document, this small rest is
enough to reproduce it.

Config:
qt-copy 3.1beta
KDE from CVSup
koffice 1.2 final 

The crashes looks different depending on kword starting method.

If I start kword from a shell and open the document then,
the following output is visible:

kdecore (KProcIO): KPIO::readln
ASSERT: "it.node != node" in /opt/qt31/include/qvaluelist.h (301)
kdecore (KProcIO): KPIO::readln
QApplication::notify: Unexpected null receiver

and the crash looks like:
0x410873d9 in __wait4 () from /lib/libc.so.6
#0  0x410873d9 in __wait4 () from /lib/libc.so.6
#1  0x410e4618 in __DTOR_END__ () from /lib/libc.so.6
#2  0x40f6ecb7 in waitpid () at wrapsyscall.c:186
#3  0x40742b3b in KCrash::defaultCrashHandler ()
   from /opt/k31test/lib/libkdecore.so.4
#4  0x41025998 in __restore ()
    at ../sysdeps/unix/sysv/linux/i386/sigaction.c:127
#5  0x417c2f2f in KoSpell::check () from /opt/k31test/lib/libkotext.so.2
#6  0x417c05a5 in KoBgSpellCheck::spellCheckNextParagraph ()
   from /opt/k31test/lib/libkotext.so.2
#7  0x417bfce9 in KoBgSpellCheck::qt_invoke ()
   from /opt/k31test/lib/libkotext.so.2
#8  0x40a3fbc4 in QObject::activate_signal () from 
/opt/qt31/lib/libqt-mt.so.3
#9  0x40c91115 in QSignal::signal () from /opt/qt31/lib/libqt-mt.so.3
#10 0x40a54e3d in QSignal::activate () from /opt/qt31/lib/libqt-mt.so.3
#11 0x40a5a1d0 in QSingleShotTimer::event () from 
/opt/qt31/lib/libqt-mt.so.3
#12 0x409f5346 in QApplication::internalNotify ()
   from /opt/qt31/lib/libqt-mt.so.3
#13 0x409f51e4 in QApplication::notify () from /opt/qt31/lib/libqt-mt.so.3
#14 0x406d6cf5 in KApplication::notify () from 
/opt/k31test/lib/libkdecore.so.4
#15 0x409da875 in QEventLoop::activateTimers ()
   from /opt/qt31/lib/libqt-mt.so.3
#16 0x409bd25d in QEventLoop::processNextEvent ()
   from /opt/qt31/lib/libqt-mt.so.3
#17 0x40a05499 in QEventLoop::enterLoop () from 
/opt/qt31/lib/libqt-mt.so.3
#18 0x40a053eb in QEventLoop::exec () from /opt/qt31/lib/libqt-mt.so.3
#19 0x409f5486 in QApplication::exec () from /opt/qt31/lib/libqt-mt.so.3
#20 0x40016a5c in main () from /opt/k31test/lib/kword.so
#21 0x4101fa5e in __libc_start_main () at 
../sysdeps/generic/libc-start.c:93


With direct start (click in file manager) the crash looks like:
0x40f303d9 in __wait4 () from /lib/libc.so.6
#0  0x40f303d9 in __wait4 () from /lib/libc.so.6
#1  0x40f8d618 in __DTOR_END__ () from /lib/libc.so.6
#2  0x40e17cb7 in waitpid () at wrapsyscall.c:186
#3  0x405ecb3b in KCrash::defaultCrashHandler ()
   from /opt/k31test/lib/libkdecore.so.4
#4  0x40ece998 in __restore ()
    at ../sysdeps/unix/sysv/linux/i386/sigaction.c:127
#5  0x4089e1e4 in QApplication::notify () from /opt/qt31/lib/libqt-mt.so.3
#6  0x40580cf5 in KApplication::notify () from 
/opt/k31test/lib/libkdecore.so.4
#7  0x40883875 in QEventLoop::activateTimers ()
   from /opt/qt31/lib/libqt-mt.so.3
#8  0x4086625d in QEventLoop::processNextEvent ()
   from /opt/qt31/lib/libqt-mt.so.3
#9  0x408ae499 in QEventLoop::enterLoop () from 
/opt/qt31/lib/libqt-mt.so.3
#10 0x408ae3eb in QEventLoop::exec () from /opt/qt31/lib/libqt-mt.so.3
#11 0x4089e486 in QApplication::exec () from /opt/qt31/lib/libqt-mt.so.3
#12 0x40ce0a5c in main () from /opt/k31test/lib/kword.so
#13 0x804d516 in launch ()
#14 0x804e3e8 in handle_launcher_request ()
#15 0x804e98b in handle_requests ()
#16 0x804f91f in main ()
#17 0x40ec8a5e in __libc_start_main () at 
../sysdeps/generic/libc-start.c:93

The document is available.
Thanks,
Frank
Comment 1 Frank Pieczynski 2002-09-21 14:29:36 UTC
Created attachment 50 [details]
short document for reproduce the crash

created by import from rtf, this may be explains the formatting
Comment 2 David Faure 2003-03-31 11:35:11 UTC
Subject: koffice/lib/kotext

CVS commit by faure: 

More timer safety during background-spellchecking.
Together with the last commit, this fixes the crash on #48114.
CCMAIL: 48114-done@bugs.kde.org


  M +7 -1      koBgSpellCheck.cc   1.34


--- koffice/lib/kotext/koBgSpellCheck.cc  #1.33:1.34
@@ -41,5 +41,7 @@ public:
 KoBgSpellCheck::KoBgSpellCheck()
 {
-    //kdDebug(32500) << "KoBgSpellCheck::KoBgSpellCheck " << this << endl;
+#ifdef DEBUG_BGSPELLCHECKING
+    kdDebug(32500) << "KoBgSpellCheck::KoBgSpellCheck " << this << endl;
+#endif
     d = new KoBgSpellCheck::KoBgSpellCheckPrivate;
     d->m_pKSpellConfig=0L;
@@ -132,4 +134,5 @@ void KoBgSpellCheck::clearIgnoreWordAll(
 void KoBgSpellCheck::startBackgroundSpellCheck()
 {
+    d->startTimer->stop(); // In case we were called directly, while the timer was running.
     if ( !m_bSpellCheckEnabled )
         return;
@@ -141,4 +144,7 @@ void KoBgSpellCheck::startBackgroundSpel
     if ( !m_bgSpell.currentTextObj )
     {
+#ifdef DEBUG_BGSPELLCHECKING
+        //kdDebug(32500) << "KoBgSpellCheck::startBackgroundSpellCheck no currentTextObj to check this time." << endl;
+#endif
         d->startTimer->start( 1000, true );
         return;