fix some zo-verification bugs that Casey found
svn: r13975
This commit is contained in:
parent
25e7978999
commit
aa4587890d
|
@ -10201,6 +10201,9 @@ void scheme_validate_closure(Mz_CPort *port, Scheme_Object *expr,
|
|||
char *new_stack;
|
||||
struct Validate_Clearing *vc;
|
||||
|
||||
if (data->max_let_depth < (data->num_params + data->closure_size))
|
||||
scheme_ill_formed_code(port);
|
||||
|
||||
sz = data->max_let_depth;
|
||||
new_stack = scheme_malloc_atomic(sz);
|
||||
memset(new_stack, VALID_NOT, sz - data->num_params - data->closure_size);
|
||||
|
@ -10284,7 +10287,7 @@ static void validate_unclosed_procedure(Mz_CPort *port, Scheme_Object *expr,
|
|||
if (q == self_pos)
|
||||
self_pos_in_closure = i;
|
||||
p = q + delta;
|
||||
if ((q < 0) || (p > depth) || (stack[p] == VALID_NOT))
|
||||
if ((q < 0) || (p >= depth) || (stack[p] == VALID_NOT))
|
||||
scheme_ill_formed_code(port);
|
||||
vld = stack[p];
|
||||
if (vld == VALID_VAL_NOCLEAR)
|
||||
|
@ -10679,7 +10682,7 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr,
|
|||
|
||||
scheme_validate_expr(port, lv->value, stack, tls, depth, letlimit, delta, num_toplevels, num_stxes, num_lifts,
|
||||
NULL, 0, 0, vc, 0);
|
||||
memset(stack, VALID_NOT, delta);
|
||||
/* memset(stack, VALID_NOT, delta); <-- seems unnecessary (and slow) */
|
||||
|
||||
c = lv->count;
|
||||
q = lv->position;
|
||||
|
@ -10737,7 +10740,7 @@ void scheme_validate_expr(Mz_CPort *port, Scheme_Object *expr,
|
|||
|
||||
c = l->count;
|
||||
|
||||
if ((c < 0) || (c + delta > depth))
|
||||
if ((c < 0) || (c + delta >= depth))
|
||||
scheme_ill_formed_code(port);
|
||||
|
||||
for (i = 0; i < c; i++) {
|
||||
|
@ -10828,6 +10831,7 @@ void scheme_validate_toplevel(Scheme_Object *expr, Mz_CPort *port,
|
|||
|
||||
void scheme_validate_boxenv(int p, Mz_CPort *port, char *stack, int depth, int delta)
|
||||
{
|
||||
if (p >= 0)
|
||||
p += delta;
|
||||
|
||||
if ((p < 0) || (p >= depth) || (stack[p] != VALID_VAL))
|
||||
|
|
|
@ -8525,9 +8525,11 @@ static Scheme_Object *read_compiled_closure(Scheme_Object *obj)
|
|||
v = SCHEME_CAR(obj);
|
||||
obj = SCHEME_CDR(obj);
|
||||
data->num_params = SCHEME_INT_VAL(v);
|
||||
if (data->num_params < 0) return NULL;
|
||||
|
||||
if (!SCHEME_PAIRP(obj)) return NULL;
|
||||
data->max_let_depth = SCHEME_INT_VAL(SCHEME_CAR(obj));
|
||||
if (data->max_let_depth < 0) return NULL;
|
||||
obj = SCHEME_CDR(obj);
|
||||
|
||||
if (!SCHEME_PAIRP(obj)) return NULL;
|
||||
|
|
|
@ -4347,7 +4347,7 @@ static Scheme_Object *read_compact_svector(CPort *port, int l)
|
|||
o->type = scheme_svector_type;
|
||||
|
||||
SCHEME_SVEC_LEN(o) = l;
|
||||
if (l)
|
||||
if (l > 0)
|
||||
v = MALLOC_N_ATOMIC(mzshort, l);
|
||||
else
|
||||
v = NULL;
|
||||
|
|
Loading…
Reference in New Issue
Block a user