[sword-devel] Patch for Sword crash with BibleTime on Windows
Gary Holmlund
gary.holmlund at gmail.com
Fri Feb 11 21:03:58 MST 2011
Troy,
Looking at getNextFilename more, it seems that it should skip reading
the file if it did not open and go on with writing the incfile a few
lines later.
Gary
On 2/11/2011 7:39 PM, Gary Holmlund wrote:
> Troy,
>
> In Rawfiles::getNextFilename() it is opening this file to read it.
> "C:\ProgramData\Application
> Data\Sword/modules/comments/rawfiles/personal/incfile"
>
> The problem is that this file does not exist. I am not sure when this
> file should have been created.
>
> Gary
>
>
> On 2/11/2011 5:49 PM, Troy A. Griffitts wrote:
>> Hey Gary,
>>
>> Thanks for the report. The problem with your patch is that it doesn't
>> actually fix the problem. read should fail if you try to read from an
>> invalid file descriptor. The problem is that it sounds like the
>> RawFiles driver has a bug which is reading from an invalid file
>> descriptor.
>>
>> Does this make sense? I appreciate the report. We should track this
>> down. And I appreciate that this fixes your specific problem, but it
>> changes the behavior of the SWORD read method to be different from the
>> libc read method and I don't think we should do this.
>>
>> If you can track down the problem in RawFiles near line 194, that would
>> be excellent!
>>
>> Thanks again for the report,
>>
>> Troy
>>
>>
>>
>> On 02/12/2011 01:15 AM, Gary Holmlund wrote:
>>> Hi,
>>>
>>> I just rediscovered a sword bug that I told you about over a year ago.
>>> For Bibletime it crashes the program when you try to use the Personal
>>> Commentary in write mode on Windows.
>>>
>>> I upgraded to Sword 1.62 recently and this caused the bug to occur
>>> again. I had been using a patched version of 1.6.0 for our Windows
>>> build. Please incorporate the patch this time.
>>>
>>> Thanks,
>>>
>>> Gary Holmlund
>>>
>>> --------------------------------------------------------------------------------
>>>
>>> *Gary Holmlund* gary.holmlund at gmail.com
>>> <mailto:sword-devel%40crosswire.org?Subject=Re:%20Re%3A%20%5Bsword-devel%5D%20Patch%20for%20Sword%20crash%20with%20BibleTime%20on%20Windows&In-Reply-To=%3C4AF0ECE1.6090906%40gmail.com%3E>
>>>
>>> /Tue Nov 3 19:54:25 MST 2009/
>>>
>>> * Previous message: [sword-devel] Python client
>>> <http://www.crosswire.org/pipermail/sword-devel/2009-November/033042.html>
>>> * Next message: [sword-devel] Python client
>>> <http://www.crosswire.org/pipermail/sword-devel/2009-November/033044.html>
>>> * *Messages sorted by:* [ date ]
>>> <http://www.crosswire.org/pipermail/sword-devel/2009-November/date.html#33043>
>>> [ thread ]
>>> <http://www.crosswire.org/pipermail/sword-devel/2009-November/thread.html#33043>
>>> [ subject ]
>>> <http://www.crosswire.org/pipermail/sword-devel/2009-November/subject.html#33043>
>>> [ author ]
>>> <http://www.crosswire.org/pipermail/sword-devel/2009-November/author.html#33043>
>>>
>>>
>>> ------------------------------------------------------------------------
>>>
>>>
>>> Hi,
>>>
>>> I am working on BibleTime for Windows and we found and fixed a crash in
>>> the sword library. I have attached a patch for the HEAD of sword
>>> svn. We
>>> are using the 1.60 version of sword.
>>>
>>> The crash occurs when trying to save to a personal commentary for the
>>> first time. Sword is looking for the "incfile" of the personal
>>> commentary. The file does not exist yet.. Here is the call stack and
>>> function at the crash point.
>>>
>>> libsword.dll!sword::FileDesc::read(void * buf=0x013eaec0, long count=4)
>>> Line 139
>>> libsword.dll!sword::RawFiles::getNextFilename() Line 194
>>> libsword.dll!sword::RawFiles::setEntry(const char * inbuf=0x0253d050,
>>> long len=3) Line 130
>>> bibletime.exe!CSwordModuleInfo::write(CSwordKey * key=0x02e6cd00, const
>>> QString& newText={...}) Line 705
>>>
>>> long FileDesc::read(void *buf, long count) {
>>> return ::read(getFd(), buf, count); // crash here
>>> }
>>>
>>> Since the file does not exist, getFd() returns a fd of -1. The read
>>> promptly crashes with the negative fd. Tracing the same problem in
>>> linux
>>> shows the same -1 fd, but the read does not crash there. The crash
>>> seems
>>> specific to the Visual Studio 2008 runtime libraries, but reading
>>> with a
>>> negative fd value is clearly wrong.
>>>
>>> The fix is simple. Test for the negative fd and return 0 from
>>> fileDesc::read if fd is negative. Returning 0 is what is happening
>>> on linux.
>>>
>>> Gary Holmlund
>
More information about the sword-devel
mailing list