GNU bug report logs -
#55847
29.0.50; line-number-at-pos ignores absolute parameter when checking position range
Previous Next
Reported by: Antoine Kalmbach <ane <at> iki.fi>
Date: Wed, 8 Jun 2022 11:45:02 UTC
Severity: normal
Tags: notabug
Found in version 29.0.50
Fixed in version 29.1
Done: Lars Ingebrigtsen <larsi <at> gnus.org>
Bug is archived. No further changes may be made.
Full log
View this message in rfc822 format
Antoine Kalmbach <ane <at> iki.fi> writes:
> When working with a narrowed buffer, line-number-at-pos complains
> that the passed position parameter is out of range.
>
> I believe this occurs because in fns.c there is check as follows:
>
> if (pos < BEGV || pos > ZV)
>
> This works just fine when the buffer isn't narrowed, but narrowing
> affects BEGV. Suppose the buffer is narrowed, and you want to get the
> line number for position x where x is before where the current narrowing
> begins, passing (line-number-at-pos x t) now reports an error
That's intentional behavior. Very rarely is code allowed to access
buffer contents outside the accessible portion of the buffer, and
line-number-at-pos is not such a piece of code.
> because the correct thing to check is BEGV_BYTE, not BEGV.
> I think the change is as simple as checking pos < start, instead of pos
> < BEGV.
>
> The easiest way to reproduce is to make a buffer, narrow to a part of
> it, then evaluate (line-number-at-pos x t) where x is smaller than the
> absolute position of the narrowing, i.e. X < BEGV, but on the other hand
> x >= BEGV_BYTE.
BEGV_BYTE is the byte position of BEGV, but narrow-to-region and
line-number-at-pos operate on character positions, so comparing pos with
BEGV_BYTE doesn't make sense. We don't want to allow code to access
buffer contents outside the accessible region, and besides, which lines
would they be on? They are not visible, and there is no "starting
point" to calculate from.
This bug report was last modified 2 years and 348 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.