Re: [RFC 8.3 3/3] Avoid a crash in source_cache::extract_lines

Tom Tromey
2019-03-13T17:20:15Z

>>>>> "Pedro" == Pedro Alves <palves@redhat.com> writes:

Pedro> Can you clarify how can first_pos end up as npos? Is that a bug in the
Pedro> caller, or is it normal? The documentation doesn't seem to allow for that:

Pedro> /* Get the source text for the source file in symtab S. FIRST_LINE
Pedro> and LAST_LINE are the first and last lines to return; line
Pedro> numbers are 1-based. If the file cannot be read, false is
Pedro> returned. Otherwise, LINES_OUT is set to the desired text. The
Pedro> returned text may include ANSI terminal escapes. */

I think you're just confusing first_pos and first_line here.
first_pos is a local variable that's used to track the position where
the first line starts:

std::string::size_type first_pos = std::string::npos;
[...]
if (lineno == first_line)
first_pos = pos;

It can still be npos if first_line is greater than the number of lines
in the file.

Tom