DM,

Sorry for the late reply and thank you for tracking this down. Yes!  This looks like a reasonable solution.  Please feel free to commit if all the sword/tests/testsuite/run-all.sh returns no problems with your change.

It's been a bit crazy these days and I haven't been able to keep up with all the great stuff going on here.

Troy


On 6/16/25 9:27 PM, DM Smith wrote:
Troy,
In VerseKey::checkBounds()
void VerseKey::checkBounds() {

        long i = getIndex();

        initBounds();
        if (i > upperBound) {
                setIndex(upperBound);
                i = getIndex();
                error = KEYERR_OUTOFBOUNDS;
        }
        if (i < lowerBound) {
                setIndex(lowerBound);
                error = KEYERR_OUTOFBOUNDS;
        }
}

i, upperBound and lowerBound are all -1, when working with a chapter that is not in the book. This is good. The proc getIndex() can’t compute the index since the chapter is not known so it rightfully returns -1.

I think there should be a check in here like there is in VerseKey.setIndex(int iindex).

So
void VerseKey::checkBounds() {

        long i = getIndex();

*        // assert we're sane*
*        if (i < 0) {*
*                error = KEYERR_OUTOFBOUNDS;*
*                return;*
*        }*

        initBounds();
        if (i > upperBound) {
                setIndex(upperBound);
                i = getIndex();
                error = KEYERR_OUTOFBOUNDS;
        }
        if (i < lowerBound) {
                setIndex(lowerBound);
                error = KEYERR_OUTOFBOUNDS;
        }
}

What do you think?

DM

On Jun 15, 2025, at 8:11 AM, DM Smith <dmsm...@crosswire.org> wrote:

Troy,

I’ve narrowed it down to turning Auto Normalize off.

In examples/cmdline/parseverselist.cpp, add parser.setAutoNormalize(false) to see the error with Gen.51.1. Note Gen.50.99 (last chapter with bad verse number) works.

DM

On Jun 12, 2025, at 7:03 PM, DM Smith <dmsm...@crosswire.org> wrote:

Troy,

I’m working on an infinite loop bug in osis2mod.

I’ve narrowed it down to ListKey containing a verse with a chapter which is beyond the end of a book.

When this happens list.increment(1) never sets an error.

Simplest test case (bit incomplete):

int i = 0;
ListKey list = new ListKey();
list.add(“Gen.51.1”);
for (list = TOP; !list.popError(); list.increment(1)) {
if (i++ > 5) break;
cout << i << list << endl;
}

If I change the verse reference to Gen.1.99 (valid chapter, invalid verse), it works as expected.

Can you figure out the problem?

I’ve got a work around but I’d rather not do that.

Thanks,
DM

_______________________________________________
sword-devel mailing list: sword-devel@crosswire.org
http://crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page

_______________________________________________
sword-devel mailing list: sword-devel@crosswire.org
http://crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page


_______________________________________________
sword-devel mailing list:sword-devel@crosswire.org
http://crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page
_______________________________________________
sword-devel mailing list: sword-devel@crosswire.org
http://crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page

Reply via email to