From 95b083165cb24dce58b5e1abb7e208b6ecf90db3 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Mon, 20 Oct 2014 16:22:56 -0500 Subject: [PATCH] syntax-color/racket-lexer: fix problem with unclosed "| " ... where the whitespace character after "|" is non-ASCII. This bug was found by random testing in `syntax-color/lexer-contract`. --- .../syntax-color-lib/syntax-color/racket-lexer.rkt | 12 +++++++----- .../tests/syntax-color/scheme-lexer.rkt | 2 ++ 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/pkgs/syntax-color-pkgs/syntax-color-lib/syntax-color/racket-lexer.rkt b/pkgs/syntax-color-pkgs/syntax-color-lib/syntax-color/racket-lexer.rkt index 6e1ba462ae..d338612c7b 100644 --- a/pkgs/syntax-color-pkgs/syntax-color-lib/syntax-color/racket-lexer.rkt +++ b/pkgs/syntax-color-pkgs/syntax-color-lib/syntax-color/racket-lexer.rkt @@ -402,14 +402,16 @@ (define racket-nobar-lexer/status (lexer/status nobar-identifier nobar-keyword nobar-bad-id)) (define (extend-error lexeme start end in) - (if (memq (peek-char-or-special in) - `(special #\newline #\return #\tab #\space #\vtab - #\" #\, #\' #\` #\( #\) #\[ #\] #\{ #\} #\; - ,eof)) + (define next (peek-char-or-special in)) + (if (or (char-whitespace? next) + (memq next + `(special + #\" #\, #\' #\` #\( #\) #\[ #\] #\{ #\} #\; + ,eof))) (ret lexeme 'error #f start end 'bad) (let-values (((rest end-pos) (get-chunk in))) (ret (string-append lexeme rest) 'error #f start end-pos 'bad)))) (define get-chunk (lexer - ((:+ (:~ identifier-delims)) (values lexeme end-pos)))) + [(:+ (:~ identifier-delims)) (values lexeme end-pos)])) diff --git a/pkgs/syntax-color-pkgs/syntax-color-test/tests/syntax-color/scheme-lexer.rkt b/pkgs/syntax-color-pkgs/syntax-color-test/tests/syntax-color/scheme-lexer.rkt index 098d01b976..5bc7ed2124 100644 --- a/pkgs/syntax-color-pkgs/syntax-color-test/tests/syntax-color/scheme-lexer.rkt +++ b/pkgs/syntax-color-pkgs/syntax-color-test/tests/syntax-color/scheme-lexer.rkt @@ -592,3 +592,5 @@ end-string (test "#:a|" "xxxx") (test "#:a#|" "xxxxx") (test "#:a||a|, a\n\"" "xxxxxxxxxxxx") + +(test "|\uA0x" "xxx")