Fix segfault in 1994/schnitzi - use fgets()
An example file that would cause the entry to crash is the Makefile. Now it won't crash. Strangely without increasing the buffer size but even using fgets() the Makefile did crash the entry. Changing the buffer size is not a problem but whether or not some other larger file will cause a problem or not I do not know. I don't see how it would but I don't see how this happened either.
This commit is contained in:
1 parent
c79aa3081c
commit
5bbdf553cc
2 files changed
+25
-11
No files matched your search
+21
-7
@@ -10,22 +10,36 @@
|
||||
|
||||
make all
|
||||
|
||||
### To run
|
||||
## To run:
|
||||
|
||||
./schnitzi < textfile
|
||||
|
||||
## Judges' comments
|
||||
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed the entry to not
|
||||
overflow the buffer (and segfault) by changing the call of `gets()` to
|
||||
`fgets()`. He also increased the buffer size. Prior to this fix one could not
|
||||
redirect the Makefile into this program, as an example problem. Thank you Cody
|
||||
for your assistance!
|
||||
|
||||
Try:
|
||||
|
||||
## Try:
|
||||
|
||||
./schnitzi < /etc/motd
|
||||
./schnitzi < /etc/passwd
|
||||
|
||||
|
||||
|
||||
## Judges' comments:
|
||||
|
||||
|
||||
Try:
|
||||
|
||||
./schnitzi < schnitzi.c
|
||||
|
||||
Compare the output of the program with its source. Sure the output
|
||||
is different, but there is more than meets the diff's eye. Can you
|
||||
find out why?
|
||||
Compare the output of the program with its source. Sure the output
|
||||
is different, but there is more than meets the `diff`'s eye. Can you
|
||||
find out why?
|
||||
|
||||
## Author's comments
|
||||
## Author's comments:
|
||||
|
||||
SPOILER:
|
||||
|
||||
|
||||
@@ -20,12 +20,12 @@ h mh111 de{l) +di (+'( d+% c n+
|
||||
*/ n = 0 ;
|
||||
main ( ) {
|
||||
char v [
|
||||
100 ] , s;
|
||||
int t[100 ] ,
|
||||
u[100 ] ; u
|
||||
1000 ] , s;
|
||||
int t[100 ] ,
|
||||
u[100 ] ; u
|
||||
[ 0
|
||||
]=ftell(stdin ) ;
|
||||
while(gets (v ) )
|
||||
while(fgets(v,100,stdin )&&((v[strlen(v)-1]='\0',1)) )
|
||||
{t [ r ]=
|
||||
strlen (
|
||||
v);y=
|
||||
|
||||
Reference in new issue
Block a user