Seq Segment Fault.
Here is my code. #!/bin/bash echo Add directions here. read URL read NUM1 read NUM2 read EXT echo Please choose a folder name. read NAM mkdir $HOME/$NAM cd $HOME/$NAM for i in $(seq -w $NUM1 $NUM2); do wget $URL${i}$EXT; done I was testing out my script, and I came across an instance where I had a large i (it started at 00 and went to 99). It processed for a few minutes (my poor intel atom) and returned with a Segmentation fault. From what I know from Assembly, I think this is a buffer overflow which could allow for malicious code injection. Please let me know if I can be of further assistance. -- Peace Out and Rock On, Ryan Whited
Re: Seq Segment Fault.
-BEGIN PGP SIGNED MESSAGE- Hash: SHA1 According to Ryan Whited on 9/18/2009 4:38 AM: #!/bin/bash for i in $(seq -w $NUM1 $NUM2) Are you sure your segfault is in seq, or is it in bash? You neglected to mention which versions you were using: bash --version seq --version However, it seems to me that your problem is that bash tries to slurp all of $() into memory, and seq generated so much data that bash ran out of memory (or overflowed its stack). In other words, it is not a segfault in seq, but bash that crashed, and because you exceeded the limits of what your machine will support. - -- Don't work too hard, make some time for fun as well! Eric Blake e...@byu.net -BEGIN PGP SIGNATURE- Version: GnuPG v1.4.9 (Cygwin) Comment: Public key at home.comcast.net/~ericblake/eblake.gpg Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAkqzde8ACgkQ84KuGfSFAYAbHgCgnNr01KRBNuhsC2ifQOEcgx4f okQAn2i/cc4inQM46UOq5WeMAsxJnwpj =s0aj -END PGP SIGNATURE-
Re: Seq Segment Fault.
On Fri, 18 Sep 2009, Eric Blake wrote: However, it seems to me that your problem is that bash tries to slurp all of $() into memory, and seq generated so much data that bash ran out of memory (or overflowed its stack). It's certainly possible for bash to run out of stack and crash with SIGSEGV. $ bash -c 'recurse() { recurse; }; recurse' Segmentation fault for i in $(seq -w $NUM1 $NUM2); do wget $URL${i}$EXT; done This could be rewritten as seq -w $NUM1 $NUM2 | while read i ; do wget $URL${i}$EXT; done to prevent all of seq's output having to be buffered at once. Cheers, Phil