From 7b7a3157771680e8b4ba8e18bab798280e052711 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 20 Oct 2015 19:38:39 -0600 Subject: [PATCH] fix taint-check ordering in expander Merge to v6.3 --- pkgs/racket-test-core/tests/racket/macro.rktl | 11 +++++++++++ racket/src/racket/src/compenv.c | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-test-core/tests/racket/macro.rktl b/pkgs/racket-test-core/tests/racket/macro.rktl index fa156577cb..33f6fadd34 100644 --- a/pkgs/racket-test-core/tests/racket/macro.rktl +++ b/pkgs/racket-test-core/tests/racket/macro.rktl @@ -1553,6 +1553,17 @@ (test 'outer dynamic-require ''should-be-outer-4 'd) +;; ---------------------------------------- +;; Check that taint check precedes bound-with-binding substitution: + +(err/rt-test (expand '(let ([x 1]) + (let-syntax ([m (lambda (stx) + #`(list #,(syntax-taint #'x)))]) + (m)))) + (lambda (exn) + (regexp-match? #rx"cannot use identifier tainted by macro transformation" + (exn-message exn)))) + ;; ---------------------------------------- (report-errs) diff --git a/racket/src/racket/src/compenv.c b/racket/src/racket/src/compenv.c index 4dc3a8f05a..1c239e965a 100644 --- a/racket/src/racket/src/compenv.c +++ b/racket/src/racket/src/compenv.c @@ -1257,9 +1257,9 @@ scheme_compile_lookup(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags, for (i = frame->num_bindings; i--; ) { if (frame->bindings[i] && SAME_OBJ(binding, frame->bindings[i])) { /* Found a lambda-, let-, etc. bound variable: */ + check_taint(find_id); if (_binder) set_binder(_binder, find_id, frame->binders[i]); - check_taint(find_id); if (!frame->vals) { if (flags & SCHEME_DONT_MARK_USE)