From: Scott S. <sch...@bi...> - 2002-11-10 19:59:31
|
Friends, Consider the following: ---------------------- bash% uname -a Linux foo 2.2.19 #1 Wed Mar 20 19:41:41 EST 2002 i586 unknown bash% clisp --version GNU CLISP 2.30 (released 2002-09-15) (built 3245891238) (memory 3245895182) Features: (CLOS LOOP COMPILER CLISP ANSI-CL COMMON-LISP LISP=CL INTERPRETER SOCKETS GENERIC-STREAMS LOGICAL-PATHNAMES SCREEN FFI UNICODE BASE-CHAR=CHARACTER PC386 UNIX) bash% cat foo.cl (defun x () (x)) (x) bash% clisp foo.cl 2>/dev/null </dev/zero | head *** - Lisp stack overflow. RESET *** - READ from #<IO SYNONYM-STREAM *TERMINAL-IO*>: illegal character #\Null[1]> *** - READ from #<IO SYNONYM-STREAM *TERMINAL-IO*>: illegal character #\Null[3]> *** - READ from #<IO SYNONYM-STREAM *TERMINAL-IO*>: illegal character #\Null[5]> *** - READ from #<IO SYNONYM-STREAM *TERMINAL-IO*>: illegal character #\Null[7]> *** - READ from #<IO SYNONYM-STREAM *TERMINAL-IO*>: illegal character #\Null[9]> *** - READ from #<IO SYNONYM-STREAM *TERMINAL-IO*>: illegal character #\Null[11]> *** - READ from #<IO SYNONYM-STREAM *TERMINAL-IO*>: illegal character #\Null[13]> *** - READ from #<IO SYNONYM-STREAM *TERMINAL-IO*>: illegal character #\Null[15]> ---------------------- This exhibits several horrible defects in clisp. It should print an error message (about stack overflow) to standard error and then simply exit. Instead.... First, in a non-interactive setting, it jumps into an interactive break loop. Second, it writes garbage to standard output. No runtime system can ever be allowed to do that. Third, the break loop reads from standard input. No runtime system can ever be allowed to do that. Standard input and output are for the user's program, and are generally connected to other programs by shell pipelines. I'm not subscribed to clisp-list, so please cc any replies. |