char *cur_line = p->tok->fp_interactive ? p->tok->interactive_src_start : p->tok->str;
assert(cur_line != NULL);
- for (int i = 0; i < lineno - 1; i++) {
- cur_line = strchr(cur_line, '\n') + 1;
+ Py_ssize_t relative_lineno = p->starting_lineno ? lineno - p->starting_lineno + 1 : lineno;
+
+ for (int i = 0; i < relative_lineno - 1; i++) {
+ char *new_line = strchr(cur_line, '\n') + 1;
+ assert(new_line != NULL && new_line < p->tok->inp);
+ if (new_line == NULL || new_line >= p->tok->inp) {
+ break;
+ }
+ cur_line = new_line;
}
char *next_newline;