id,summary,reporter,owner,description,type,status,priority,milestone,component,version,resolution,keywords,cc,difficulty 575,Extended lambda list syntax with default values isn't checked properly,sjamaan,felix winkelmann,"When using a default value with an optional argument, you get a strange error message that there's an error in your LET syntax, and when you do the same with a keyword argument, Chicken segfaults. The reason is there's a missing check in {{{##sys#expand-extended-lambda-list}}}'s final {{{cond}}} clause; it implicitly assumes that a 2-element list after {{{#!key}}} or {{{#!optional}}} always has a symbol as its car. The attached patch contains a simple fix and regression test. {{{ CHICKEN (c)2008-2010 The Chicken Team (c)2000-2007 Felix L. Winkelmann Version 4.6.0 netbsd-unix-gnu-x86-64 [ 64bit manyargs dload ptables ] compiled 2011-01-21 on langly (NetBSD) #;1> (define (foo #!optional 0) 1) Error: invalid lambda list syntax: (#!optional 0) Call history: (define (foo #!optional 0) 1) (##core#set! foo (##core#lambda (#!optional 0) 1)) (##core#lambda (#!optional 0) 1) <-- #;1> (define (foo #!optional (0 0)) 1) Error: during expansion of (let12 ...) - in `let' - symbol expected: (let ((0 (optional tmp 0))) 1) Call history: (define (foo #!optional (0 0)) 1) (##core#set! foo (##core#lambda (#!optional (0 0)) 1)) (##core#lambda (#!optional (0 0)) 1) <-- #;1> (define (foo #!key 0) 1) Error: invalid lambda list syntax: (#!key 0) Call history: (define (foo #!key 0) 1) (##core#set! foo (##core#lambda (#!key 0) 1)) (##core#lambda (#!key 0) 1) <-- #;1> (define (foo #!key (0 0)) 1) zsh: segmentation fault csi }}}",defect,closed,minor,4.9.0,expander,4.6.x,fixed,"DSSSL lambda list, keywords, optionals",,