gcl-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Gcl-devel] Re: danger of open


From: Camm Maguire
Subject: [Gcl-devel] Re: danger of open
Date: 31 Oct 2006 11:16:44 -0500
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

Greetings!

Matt Kaufmann <address@hidden> writes:

> Hi --
> 
> Thank you for the quick reply!
> 
> I realize now that I can just handle this issue at the ACL2 level, by
> causing an error on an attempt to call open on a string starting with
> the | character.  (As a possibly humorous aside: I forgot to quote
> (open "|kill -9 -1") as a format argument in my error message, and
> sure enough, when testing an illegal open I managed to log myself out!
> Ouch.)
> 

OK.  Other options in case you find them useful are

1) runtime setting disabling piped opens
2) compile time setting doing the same
3) running the pipe in a sanitized subshell incapable of interfering
   with the parent. (my favorite)

> But here are some observations in case you find them helpful.
> 
> I guess it wouldn't help me to check the type of the returned stream,
> since I want to avoid executing code after the pipe.  Anyhow, for what
> it's worth, it looks like GCL 2.7.0 ANSI (a version Boyer sent me
> yesterday) returns FILE-STREAM for the type of a stream connected to
> other than a file.
> 
>   >(setq str (open "|cat tmp" :direction :input))
> 
>   #<input stream "|cat tmp">
> 
>   >(type-of str)
> 
>   FILE-STREAM
> 
>   >
> 
> But actually, the ANSI spec for open seems to require a FILE-STREAM
> (or nil) to be returned; see
> http://www.lisp.org/HyperSpec/Body/fun_open.html#open.  So I'm not
> sure that the above OPEN is legal.
> 

Well, if we must return a file-stream, we must.  I think a pipe fits
that concept, at least within the unix philosophy.  Perhaps an
additional predicate 'seekable-stream-p?  There are all sorts of
objects one might open that are not seekable.  In fact, I'm not sure
CL supports file repositioning more than one char at a time.
char devices (e.g. /dev/random), fifos, sockets, etc.

Take care,

> Thanks --
> -- Matt
>    Cc: address@hidden, address@hidden, address@hidden
>    From: Camm Maguire <address@hidden>
>    Date: 30 Oct 2006 14:54:44 -0500
>    X-SpamAssassin-Status: No, hits=-2.5 required=5.0
>    X-UTCS-Spam-Status: No, hits=-240 required=200
> 
>    Greetings!
> 
>    IMHO, this is a pretty useful feature of GCL, which helps in
>    auto-decompressing compressed files, outputting straight to a printer,
>    etc.  It also matches the unix convention of "pipes as file objects"
>    -- e.g. gnuplot and many other programs work this way.  
> 
>    Perhaps some predicate on the stream would help?  If memory serves,
>    the ansi standard has such notions, e.g. 'file-streams'.
> 
>    Take care,
> 
>    Matt Kaufmann <address@hidden> writes:
> 
>    > Hi, Camm --
>    > 
>    > Bob Boyer pointed out something scary to me back in May, and I'm
>    > finally getting around to asking you about it.  He noticed that by
>    > executing (open "|kill -9 -1") in GCL, you can logout and kill all
>    > your processes!  Or just start up GCL in Linux, suspend and use ps to
>    > get the process id -- say it's 23327 -- and then do this to kill your
>    > GCL:
>    > 
>    > (open "|kill -9 23327")
>    > 
>    > This is scary from an ACL2 perspective, when I'd expected that open
>    > just does an open.  I suppose we could look for a first character of
>    > #\| and cause an error in that case.  But maybe you want to consider
>    > eliminating this GCL feature?
>    > 
>    > Thanks --
>    > -- Matt
>    > 
>    > 
>    > 
> 
>    -- 
>    Camm Maguire                                               address@hidden
>    ==========================================================================
>    "The earth is but one country, and mankind its citizens."  --  Baha'u'llah
> 
> 
> 

-- 
Camm Maguire                                            address@hidden
==========================================================================
"The earth is but one country, and mankind its citizens."  --  Baha'u'llah




reply via email to

[Prev in Thread] Current Thread [Next in Thread]