fix validation of module .zo exp-time content, and fix zo-marshal
This commit is contained in:
parent
8505bd8bca
commit
c7c8f56e11
|
@ -479,7 +479,18 @@
|
|||
[l (cons (lookup-req 1) l)] ; et-requires
|
||||
[l (cons (lookup-req 0) l)] ; requires
|
||||
[l (cons (list->vector body) l)]
|
||||
[l (cons (list->vector syntax-body) l)]
|
||||
[l (cons (list->vector
|
||||
(for/list ([i (in-list syntax-body)])
|
||||
(define (maybe-one l) ;; a single symbol is ok
|
||||
(if (and (pair? l) (null? (cdr l)))
|
||||
(car l)
|
||||
l))
|
||||
(match i
|
||||
[(struct def-syntaxes (ids rhs prefix max-let-depth))
|
||||
(vector (maybe-one ids) rhs max-let-depth prefix #f)]
|
||||
[(struct def-for-syntax (ids rhs prefix max-let-depth))
|
||||
(vector (maybe-one ids) rhs max-let-depth prefix #t)])))
|
||||
l)]
|
||||
[l (append (apply
|
||||
append
|
||||
(map (lambda (l)
|
||||
|
|
|
@ -10416,6 +10416,22 @@ static Scheme_Object *read_module(Scheme_Object *obj)
|
|||
e = SCHEME_CAR(obj);
|
||||
if (!SCHEME_VECTORP(e)) return_NULL();
|
||||
m->et_body = e;
|
||||
for (i = SCHEME_VEC_SIZE(e); i--; ) {
|
||||
e = SCHEME_VEC_ELS(m->et_body)[i];
|
||||
if (!SCHEME_VECTORP(e)) return_NULL();
|
||||
/* SCHEME_VEC_ELS(e)[1] should be code */
|
||||
if (!SCHEME_INTP(SCHEME_VEC_ELS(e)[2])) return_NULL();
|
||||
if (!SAME_TYPE(SCHEME_TYPE(SCHEME_VEC_ELS(e)[3]), scheme_resolve_prefix_type))
|
||||
return_NULL();
|
||||
e = SCHEME_VEC_ELS(e)[0];
|
||||
if (!SCHEME_SYMBOLP(e)) {
|
||||
while (SCHEME_PAIRP(e)) {
|
||||
if (!SCHEME_SYMBOLP(SCHEME_CAR(e))) return_NULL();
|
||||
e = SCHEME_CDR(e);
|
||||
}
|
||||
if (!SCHEME_NULLP(e)) return_NULL();
|
||||
}
|
||||
}
|
||||
obj = SCHEME_CDR(obj);
|
||||
|
||||
if (!SCHEME_PAIRP(obj)) return_NULL();
|
||||
|
|
Loading…
Reference in New Issue
Block a user