From 35d589cfb861ed81b5a235eb8fdcde3f143c4367 Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Tue, 10 May 2022 00:49:09 -0700 Subject: [PATCH] gh-92256: Improve Argument Clinic parser error messages (GH-92268) Co-authored-by: Serhiy Storchaka Co-authored-by: Victor Stinner (cherry picked from commit 4bd07d1dbd493fc9b2c2a77e9e905c517682052e) Co-authored-by: Erlend Egeberg Aasland --- Tools/clinic/clinic.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py index 655e386512a581..c68ee9a232078f 100755 --- a/Tools/clinic/clinic.py +++ b/Tools/clinic/clinic.py @@ -1566,10 +1566,16 @@ def parse_clinic_block(self, dsl_name): def is_stop_line(line): # make sure to recognize stop line even if it # doesn't end with EOL (it could be the very end of the file) - if not line.startswith(stop_line): + if line.startswith(stop_line): + remainder = line[len(stop_line):] + if remainder and not remainder.isspace(): + fail(f"Garbage after stop line: {remainder!r}") + return True + else: + # gh-92256: don't allow incorrectly formatted stop lines + if line.lstrip().startswith(stop_line): + fail(f"Whitespace is not allowed before the stop line: {line!r}") return False - remainder = line[len(stop_line):] - return (not remainder) or remainder.isspace() # consume body of program while self.input: