From 439ef9bffb9f25881bd745332d47ee8bf0392f2d Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 25 Jun 2010 17:47:44 -0600 Subject: [PATCH] fix another bytecode-validation bug found by Casey --- src/racket/src/eval.c | 4 ++-- src/racket/src/schpriv.h | 2 +- src/racket/src/syntax.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/racket/src/eval.c b/src/racket/src/eval.c index de169dcec0..10c5fe30c2 100644 --- a/src/racket/src/eval.c +++ b/src/racket/src/eval.c @@ -12566,12 +12566,12 @@ void scheme_validate_toplevel(Scheme_Object *expr, Mz_CPort *port, make_clearing_stack(), 0, 0); } -void scheme_validate_boxenv(int p, Mz_CPort *port, char *stack, int depth, int delta) +void scheme_validate_boxenv(int p, Mz_CPort *port, char *stack, int depth, int delta, int letlimit) { if (p >= 0) p += delta; - if ((p < 0) || (p >= depth) || (stack[p] != VALID_VAL)) + if ((p < 0) || (p >= letlimit) || (stack[p] != VALID_VAL)) scheme_ill_formed_code(port); stack[p] = VALID_BOX; diff --git a/src/racket/src/schpriv.h b/src/racket/src/schpriv.h index f126768ee9..db10c0de64 100644 --- a/src/racket/src/schpriv.h +++ b/src/racket/src/schpriv.h @@ -2683,7 +2683,7 @@ void scheme_validate_toplevel(Scheme_Object *expr, Mz_CPort *port, int num_toplevels, int num_stxes, int num_lifts, int skip_refs_check); void scheme_validate_boxenv(int pos, Mz_CPort *port, - char *stack, int depth, int delta); + char *stack, int depth, int delta, int letlimit); int scheme_validate_rator_wants_box(Scheme_Object *app_rator, int pos, int hope, diff --git a/src/racket/src/syntax.c b/src/racket/src/syntax.c index 968926f04e..21df40bce4 100644 --- a/src/racket/src/syntax.c +++ b/src/racket/src/syntax.c @@ -2728,7 +2728,7 @@ static void bangboxenv_validate(Scheme_Object *data, Mz_CPort *port, if (!SCHEME_PAIRP(data)) scheme_ill_formed_code(port); - scheme_validate_boxenv(SCHEME_INT_VAL(SCHEME_CAR(data)), port, stack, depth, delta); + scheme_validate_boxenv(SCHEME_INT_VAL(SCHEME_CAR(data)), port, stack, depth, delta, letlimit); scheme_validate_expr(port, SCHEME_CDR(data), stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts,