diff options
author | Guido van Rossum <guido@python.org> | 1999-09-18 20:49:39 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 1999-09-18 20:49:39 (GMT) |
commit | 3aca65312a9b6c5fe741167764d56de073259f73 (patch) | |
tree | ca14266eda0e167f0c9427bbdaa3b1b314f83a4b /Python | |
parent | 458e7fab9bd8092876bc8fe4a2520d1edc694626 (diff) | |
download | cpython-3aca65312a9b6c5fe741167764d56de073259f73.zip cpython-3aca65312a9b6c5fe741167764d56de073259f73.tar.gz cpython-3aca65312a9b6c5fe741167764d56de073259f73.tar.bz2 |
Tim Peters fixed PR#75: very long lines cause incorrect tracebacks.
Diffstat (limited to 'Python')
-rw-r--r-- | Python/traceback.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/Python/traceback.c b/Python/traceback.c index 53b84f3..ca77eaa 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -197,8 +197,17 @@ tb_displayline(f, filename, lineno, name) if (xfp == NULL || err != 0) return err; for (i = 0; i < lineno; i++) { - if (fgets(linebuf, sizeof linebuf, xfp) == NULL) - break; + char* pLastChar = &linebuf[sizeof(linebuf)-2]; + do { + *pLastChar = '\0'; + if (fgets(linebuf, sizeof linebuf, xfp) == NULL) + break; + /* fgets read *something*; if it didn't get as + far as pLastChar, it must have found a newline + or hit the end of the file; if pLastChar is \n, + it obviously found a newline; else we haven't + yet seen a newline, so must continue */ + } while (*pLastChar != '\0' && *pLastChar != '\n'); } if (i == lineno) { char *p = linebuf; |