From a95e977e41ca13ac2677c455e5270cf4018f5838 Mon Sep 17 00:00:00 2001 From: Benjamin Peterson Date: Fri, 29 Oct 2010 03:28:14 +0000 Subject: [PATCH] decrement offset when it points to a newline (#10186 followup) --- Lib/test/test_traceback.py | 4 ++++ Python/pythonrun.c | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/Lib/test/test_traceback.py b/Lib/test/test_traceback.py index e4ae4abcc9..75678497bf 100644 --- a/Lib/test/test_traceback.py +++ b/Lib/test/test_traceback.py @@ -295,6 +295,10 @@ class BaseExceptionReportingTests: raise SyntaxError('', ('', 0, 5, 'hello')) msg = self.get_report(e).splitlines() self.assertEqual(msg[-2], " ^") + def e(): + exec("x = 5 | 4 |") + msg = self.get_report(e).splitlines() + self.assertEqual(msg[-2], ' ^') class PyExcReportingTests(BaseExceptionReportingTests, unittest.TestCase): diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 1b0a84bd65..33dd11bc88 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -1344,6 +1344,8 @@ print_error_text(PyObject *f, int offset, const char *text) { char *nl; if (offset >= 0) { + if (offset > 0 && offset == strlen(text) && text[offset - 1] == '\n') + offset--; for (;;) { nl = strchr(text, '\n'); if (nl == NULL || nl-text >= offset) @@ -1363,7 +1365,7 @@ print_error_text(PyObject *f, int offset, const char *text) if (offset == -1) return; PyFile_WriteString(" ", f); - while (--offset) + while (--offset > 0) PyFile_WriteString(" ", f); PyFile_WriteString("^\n", f); } -- 2.40.0