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

Greg Hellings greg.hellings at gmail.com
Tue Mar 19 07:26:45 MST 2013


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.orghttp://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/20130319/a0e990e9/attachment-0001.html>


More information about the sword-devel mailing list