Ilya Zakharevich on Fri, 27 Jun 2003 09:10:32 -0700


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

Re: system() limitation


On Fri, Jun 27, 2003 at 10:45:33AM -0400, Igor Schein wrote:
> > > ? system("echo "vector(43204,x,1)"|wc -c")
> > >  129613
> > > ? system("echo "vector(43205,x,1)"|wc -c")

> > > Looks like a silent buffer overflow to me.  Maybe the maximum buffer
> > > size allowed should be documented?
> > 
> > How can PARI know the limitations of the shell you are currently using?
> 
> This is not a shell limitation:
> 
> % echo `echo 'vector(1000000,x,1)' | gp -q`|wc -c
> 3000001

Again: you are comparing the shell PARI uses with one you use.  They
can easily be different.

Here (Solaris) the limit is close to

 ? system("echo "vector(343205,x,1)"|wc -c")
 1029616

And /bin/sh can handle your example with vector(1e6) fine.  Hmm; maybe
it is a system()/execve() limitation?  At least Perl has the same
problem:

 perl -wle '$s = join ",", 1..1000000; system "echo $s | wc -c" and die $?'
 65280 at -e line 1.
 Exit 255

So it *is* an execve() limitation.  Of course, when you type things
into your shell, you get the builtin 'echo', so the shell should not
start anything with a long command line.

/bin/echo `echo 'vector(1000000,x,1)' | gp -s 128M -q` | wc -c
/bin/echo: Arg list too long.
      0
Exit 1

Hope this helps,
Ilya