[sword-devel] breakage in verse management at -r2785?

Nic Carter niccarter at mac.com
Thu Mar 21 16:18:56 MST 2013


Thanks, seems to work for me. :)

On 22/03/2013, at 9:40 AM, "Troy A. Griffitts" <scribe at crosswire.org> wrote:

> Thanks for all the help guys.
> 
> It seems the problem (or at least 'a' problem) was when you are set to an intro (or above) and you try to lookup ChapterMax or VerseMax.
> I added a check to simply return 0 if this is called.
> 
> Nic's code snippet doesn't throw any valgrind errors anymore.
> 
> Hope this squashes this.
> 
> Let me know,
> 
> Troy
> 
> 
> 
> On 03/21/2013 03:40 AM, Nic Carter wrote:
>> Ok, I have just looked into r2785 in PS.
>> 
>> PS opened to the previous chapter/verse I had used in the app, but when I tried to navigate to Genesis chapter 1 it exploded the same as what has been reported.
>> 
>> The code I have is:
>> 
>>  sword::VerseKey *curKey = (sword::VerseKey*)swModule->getKey();
>>  curKey->setIntros(YES);
>>  curKey->setText([chapter cStringUsingEncoding: NSUTF8StringEncoding]);
>>  curKey->setVerse(0);
>>  
>>  swModule->stripText();
>> 
>> and the setText call is basically being given "Genesis 1". This code has worked since day 1 of PS.
>> 
>> The call to stripText() is where it explodes, and in my case, it is thinking that it should be going to chapter 159607.
>> 
>> Seems r2785 introduces a fun bug somewhere?
>> 
>> Further testing reveals that it works fine bringing up Gen 2
>> works fine bringing up Matt 1 (possible corner case, given it's the first book in the NT?)
>> works fine with Rev 1, Rev 22
>> 
>> However, then randomly, I decided to try Gen 1 again & it worked!
>> So I force quit the app, launched again & it resumed it's crashing on Gen 1, this time thinking it was trying chapter 160880...  :/
>> 
>> Moving the setIntros(YES) line below setText() did not solve the issue.
>> However, removing the setIntros() line and changing the other line to setVerse(1) DID seem to solve the crashing issue for me.
>> 
>> So, it appears that when setIntros() is set to YES then the r2785 changes causes a crash.
>> 
>> FYI, screenshot of the stack where it crashes is attached for fun :)
>> 
>> Hope this helps? Gotta run off now, so I can't dig deeper right now...
>> 
>> 
>> ybic
>>  nic...  :)
>> 
>> // attachment removed as even tho it was only 10k, it failed to get through without moderation :(
>> 
>> On 20/03/2013, at 1:26 AM, Greg Hellings <greg.hellings at gmail.com> wrote:
>> 
>>> I have toyed with changing this on the Xiphos side, setting key.setIntros(1) before setting the key to 0:0 or 1:0 and rendering. The key that is used during rendering appears to be a copy of the module's key, and it does not appear to be preserving the value of the intros parameter. It seems like this should be a multi-point fix.
>>> 
>>> 1) SWORD should not explode when intros == 0 and the user tries to navigate to a Genesis {1,0}:0 destination. My previous diff appears to handle that.
>>> 2) Xiphos should properly call setIntros(1) before attempting to fetch 1:0 without the user's direct input (e.g. when the user has selected to view headings & intros). I have a diff in hand for this, but it does not resolve the problem because...
>>> 3) SWORD should properly preserve the value of intros when copying the key for use during rendering.
>>> 
>>> --Greg
>>> 
>>> 
>>> On Tue, Mar 19, 2013 at 8:26 AM, Greg Hellings <greg.hellings at gmail.com> wrote:
>>> The following diff seems to solve the problem. I don't know if it's the "correct" way to go about it, but it appears to resolve the issue from what I see in Xiphos. I have a feeling the "better" way to do it is to have Xiphos set the intros == 1 before attempting to fetch intro material? My editor appears to have botched the white space, so please forgive that.
>>> 
>>> diff --git a/src/keys/versekey.cpp b/src/keys/versekey.cpp
>>> index 20cccc5..0290fd7 100644
>>> --- a/src/keys/versekey.cpp
>>> +++ b/src/keys/versekey.cpp
>>> @@ -1347,7 +1347,9 @@ void VerseKey::normalize(bool autocheck)
>>>                         }
>>>                         if (verse < (intros?0:1)) {
>>>                                 if (--chapter < (intros?0:1)) {
>>> -                                       --book;
>>> +                    if (book > 1) {
>>> +                        --book;
>>> +                    }
>>>                                         chapter += (getChapterMax() + (intros?1:0));
>>>                                 }
>>>                                 verse += (getVerseMax() + (intros?1:0));
>>> 
>>> 
>>> On Mon, Mar 18, 2013 at 9:13 PM, Greg Hellings <greg.hellings at gmail.com> wrote:
>>> 
>>> 
>>> 
>>> On Mon, Mar 18, 2013 at 5:07 PM, Troy A. Griffitts <scribe at crosswire.org> wrote:
>>> Thanks Greg,
>>> 
>>> Any idea where chapter 17474 is coming from?
>>> 
>>> I can add code to check max before looking into the vector, which I'd rather not because it should be an unnecessary check each time and will be a speed hit, but even so, who ever is asking for the maximum verse for chapter 17474 is obviously doing something wrong.
>>> 
>>> 
>>> I'm hardly competent with a C debugger, but let's see what sense I can make of this. Somewhere in VerseKey::parseVerseList on line 944 (#5 in the stack trace) curKey has a value of 17425 for chapter. The text buffer reads "Genesis 1:0" and the value of the chap variable is 1. 
>>> 
>>> The value of 17,425 is being set on line 1351 of versekey.cpp when a key value of "Genesis 1:0" is being parsed while intros == 0. This triggers the condition
>>> 
>>> if (verse < (intros?0:1))
>>> 
>>> which causes the resulting block to be executed. Xiphos believes that headings have been enabled here, and Xiphos has always considered 'Headings' and 'Introductions' to be synonymous from my understanding. I know there's been some discussion of the Headings/Intro distinction here lately, so I don't know if Xiphos is now running afoul of changes you made in this distinction due to prior bugs in the implementation that unified them or not?
>>> 
>>> I'm not sure if there's more I can contribute here without a deeper understanding of Xiphos' options and SWORD's parsing.
>>> 
>>> --Greg
>>>  
>>> I'll try to have a look soon.
>>> 
>>> Troy
>>> 
>>> 
>>> 
>>> 
>>> On 03/18/2013 05:12 PM, Greg Hellings wrote:
>>>> #1  0x00007ffff527724c in sword::VersificationMgr::Book::getVerseMax (this=0xa60028, chapter=17424)
>>>>     at /home/ghellings/Projects-old/sword/src/mgr/versificationmgr.cpp:241
>>>> #2  0x00007ffff525aebb in sword::VerseKey::getVerseMax (this=0xdcc290)
>>>>     at /home/ghellings/Projects-old/sword/src/keys/versekey.cpp:1243
>>>> #3  0x00007ffff525b65b in sword::VerseKey::normalize (this=0xdcc290, autocheck=true)
>>>>     at /home/ghellings/Projects-old/sword/src/keys/versekey.cpp:1353
>>>> #4  0x00007ffff525bbe9 in sword::VerseKey::setVerse (this=0xdcc290, iverse=0)
>>>>     at /home/ghellings/Projects-old/sword/src/keys/versekey.cpp:1523
>>>> #5  0x00007ffff52596b3 in sword::VerseKey::parseVerseList (this=0xeb7fa0, buf=0xea5e1b "", defaultKey=0x0, expandRange=false, 
>>>>     useChapterAsVerse=false) at /home/ghellings/Projects-old/sword/src/keys/versekey.cpp:944
>>>> #6  0x00007ffff52570d8 in sword::VerseKey::parse (this=0xeb7fa0, checkAutoNormalize=true)
>>>>     at /home/ghellings/Projects-old/sword/src/keys/versekey.cpp:293
>>>> #7  0x00000000004922df in sword::VerseKey::setText (this=0xeb7fa0, ikey=0xd04b20 "Genesis 0:0")
>>>>     at /usr/local/include/sword/versekey.h:210
>>>> #8  0x0000000000492310 in sword::VerseKey::operator= (this=0xeb7fa0, ikey=0xd04b20 "Genesis 0:0")
>>>>     at /usr/local/include/sword/versekey.h:475
>>>> #9  0x00007ffff52df98f in sword::OSISFootnotes::processText (this=0xef4920, text=..., key=0xd14a00, module=0xef9618)
>>>>     at /home/ghellings/Projects-old/sword/src/modules/filters/osisfootnotes.cpp:65
>>>> #10 0x00007ffff5296fec in sword::SWModule::filterBuffer (this=0xef9618, filters=0xef90b0, buf=..., key=0xd14a00)
>>>>     at /home/ghellings/Projects-old/sword/src/modules/swmodule.cpp:1352
>>>> #11 0x00007ffff5297aa1 in sword::SWModule::optionFilter (this=0xef9618, buf=..., key=0xd14a00)
>>>>     at /home/ghellings/Projects-old/sword/include/swmodule.h:622
>>>> #12 0x00007ffff5293ea7 in sword::SWModule::renderText (this=0xef9618, buf=0x0, len=-1, render=true)
>>>>     at /home/ghellings/Projects-old/sword/src/modules/swmodule.cpp:826
>>>> #13 0x000000000049219f in sword::SWModule::operator char const* (this=0xef9618) at /usr/local/include/sword/swmodule.h:709
>>>> #14 0x000000000049e093 in GTKChapDisp::getVerseBefore (this=0xf0b420, imodule=...) at ../src/main/display.cc:1130
>>>> 
>>>> When I drill all the way down in, the appear to try and pull the verse max for chapter 17424 when asked to render Genesis 0:0.
>>>> 
>>>> --Greg
>>>> 
>>>>  
>>>> 
>>>> 
>>>> 
>>>>                                                           
>>>> This
>>>>                                                           segfault only
>>>>                                                           seems to
>>>>                                                           happen when I
>>>>                                                           enter Genesis
>>>>                                                           1 in the
>>>>                                                           navigation
>>>>                                                           panel and not
>>>>                                                           at any other
>>>>                                                           time. Those
>>>>                                                           with more gdb
>>>>                                                           savvy than I
>>>>                                                           can maybe
>>>>                                                           figure out
>>>>                                                           more of what
>>>>                                                           is going on.
>>>> 
>>>> 
>>>>                                                           
>>>> --Greg
>>>> 
>>>> 
>>>> On Mon, Mar 11, 2013 at 8:57 PM, Karl Kleinpaste <karl at kleinpaste.org> wrote:
>>>> I see that your new showchapter.cpp works.  The only difference in how
>>>> that works versus Xiphos code is you changed the VerseKey init slightly,
>>>> so I made that change:
>>>> 
>>>> VerseKey *key = (VerseKey *)imodule.getKey();
>>>> 
>>>> And yet Xiphos still fails to construct the chapter.  The loop never
>>>> executes once.  I don't know what to make of it.  I will have to look at
>>>> it some more.
>>>> 
>>>> _______________________________________________
>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>> Instructions to unsubscribe/change your settings at above page
>>>> 
>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
>>>> sword-devel mailing list: sword-devel at crosswire.org
>>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>>> Instructions to unsubscribe/change your settings at above page
>>> 
>>> 
>>> _______________________________________________
>>> sword-devel mailing list: sword-devel at crosswire.org
>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>> Instructions to unsubscribe/change your settings at above page
>>> 
>>> 
>>> 
>>> _______________________________________________
>>> sword-devel mailing list: sword-devel at crosswire.org
>>> http://www.crosswire.org/mailman/listinfo/sword-devel
>>> Instructions to unsubscribe/change your settings at above page
>> 
>> 
>> 
>> _______________________________________________
>> sword-devel mailing list: sword-devel at crosswire.org
>> http://www.crosswire.org/mailman/listinfo/sword-devel
>> Instructions to unsubscribe/change your settings at above page
> 
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.crosswire.org/pipermail/sword-devel/attachments/20130322/526c91ad/attachment-0001.html>


More information about the sword-devel mailing list