[sword-devel] crashes with ciphering code

Martin Gruner mg.pub at gmx.net
Mon Nov 27 10:56:21 MST 2006


Hi Troy.

I wrote you that we are having difficulties with BibleTime's stability since 
we use my dumb "check that the entered cipher key is valid" function, which 
basically just calls 

(*m_module) = sword::TOP;
QString test = QString::fromLatin1( m_module->getRawEntryBuf().c_str() );

These lines _sometimes_ make BibleTime crash like this:

And the KDE crash handler backtrace is:
 Using host libthread_db
 library "/lib/libthread_db.so.1".
 [Thread debugging using libthread_db enabled]
 [New Thread -1241056400 (LWP 5365)]
 [KCrash handler]
 #6 *__GI_strcpy (dest=0x0, src=0x12f75880 <Address
 0x12f75880 out of bounds>)
 at ../sysdeps/generic/strcpy.c:39
 #7 0xb65ebbe6 in sword::zStr::getCompressedText ()
 from /usr/lib/libsword-1.5.9.so
 #8 0xb65ecce7 in sword::zStr::getText ()
 from /usr/lib/libsword-1.5.9.so
 #9 0xb664928c in sword::zLD::getEntry ()
 from /usr/lib/libsword-1.5.9.so
 #10 0xb66494e9 in sword::zLD::getRawEntryBuf ()
 from /usr/lib/libsword-1.5.9.so
 #11 0xb6647bab in sword::SWLD::setPosition ()
 from /usr/lib/libsword-1.5.9.so
 #12 0x08128af1 in CSwordModuleInfo::unlockKeyIsValid

(Strange thing here: crashes on (*m_module) = sword::TOP;)
A user now posted a more detailed analysis:

"Well, I've narrowed down the bug a bit, to somewhere in sword's 
ciphered-text--handling  system, or possibly in how bibletime uses that 
system. When I removed the two "locked" modules, gerhfa2002
 and gerhfalex2002, from  my /usr/share/sword tree, the crashes don't seem to 
be happening.
 (Although I still get "Error reading ulBuffNum" sometimes while creating 
indices, which I  got before.)
 
  zStr::getCompressedText calls
 strcpy(*buf, cacheBlock->getEntry(entry));
 the getEntry is in entriesblk.cpp, and it calls getMetaEntry. getEntry then 
returns: return (offset) ? block+offset : empty;
 The crashing occurs when offset is non-zero but
 block+offset is not a valid string pointer.
 Hence, in the previous post:
 #6 *__GI_strcpy (dest=0x0, src=0x12f75880 <Address 
 0x12f75880 out of bounds>)
 
 0x12f75880 in this case was block+offset (confirmed by
 printing out the value of  block+offset on another occasion).

Do you think this is something that can be fixed? If not, I'll have to disable 
the "check cipher key" function again. Or is it even an error in BibleTime?

Thanks for your guidance in this matter.

mg



More information about the sword-devel mailing list