summaryrefslogtreecommitdiffstats
path: root/Python/traceback.c
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2023-09-08 16:56:10 (GMT)
committerGitHub <noreply@github.com>2023-09-08 16:56:10 (GMT)
commitc1a2ef5efceda2705919ee0233ff657575909ce9 (patch)
tree085aff1ec746abe497ebb42f68cb775d45943019 /Python/traceback.c
parentb55cf2c2d82d7567720df113117752841ce74606 (diff)
downloadcpython-c1a2ef5efceda2705919ee0233ff657575909ce9.zip
cpython-c1a2ef5efceda2705919ee0233ff657575909ce9.tar.gz
cpython-c1a2ef5efceda2705919ee0233ff657575909ce9.tar.bz2
[3.11] gh-106922: Fix error location for constructs with spaces and parentheses (GH-108959) (#109148)
Co-authored-by: Pablo Galindo Salgado <Pablogsal@gmail.com>
Diffstat (limited to 'Python/traceback.c')
-rw-r--r--Python/traceback.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/Python/traceback.c b/Python/traceback.c
index 7f47349..7010736 100644
--- a/Python/traceback.c
+++ b/Python/traceback.c
@@ -621,6 +621,11 @@ extract_anchors_from_expr(const char *segment_str, expr_ty expr, Py_ssize_t *lef
++*right_anchor;
}
+ // Keep going if the current char is not ')'
+ if (i+1 < right->col_offset && (segment_str[i] == ')')) {
+ continue;
+ }
+
// Set the error characters
*primary_error_char = "~";
*secondary_error_char = "^";
@@ -631,6 +636,18 @@ extract_anchors_from_expr(const char *segment_str, expr_ty expr, Py_ssize_t *lef
case Subscript_kind: {
*left_anchor = expr->v.Subscript.value->end_col_offset;
*right_anchor = expr->v.Subscript.slice->end_col_offset + 1;
+ Py_ssize_t str_len = strlen(segment_str);
+
+ // Move right_anchor and left_anchor forward to the first non-whitespace character that is not ']' and '['
+ while (*left_anchor < str_len && (IS_WHITESPACE(segment_str[*left_anchor]) || segment_str[*left_anchor] != '[')) {
+ ++*left_anchor;
+ }
+ while (*right_anchor < str_len && (IS_WHITESPACE(segment_str[*right_anchor]) || segment_str[*right_anchor] != ']')) {
+ ++*right_anchor;
+ }
+ if (*right_anchor < str_len){
+ *right_anchor += 1;
+ }
// Set the error characters
*primary_error_char = "~";