Subject: The great gets() debate from back in March ...
To: None <current-users@netbsd.org>
From: Greg Earle <earle@isolar.Tujunga.CA.US>
List: current-users
Date: 10/05/1994 23:35:05
I just ran across my first program that I've compiled in a while which uses
gets(). It's the main driver program "display.c" from the "display" program
that is a part of ImageMagick 3.3, which comes as part of the X11 R6
contributed software:
netbsd4me:1:61 [/usr/X11R6/src/contrib/programs/ImageMagick-3.3] % sed -n \
'11231,11240p' display.c.orig
if (access(resource_info.write_filename,0) == 0)
{
char
answer[2];
(void) fprintf(stderr,"Overwrite %s? ",
resource_info.write_filename);
(void) gets(answer);
if (!((*answer == 'y') || (*answer == 'Y')))
exit(1);
When I provided the author a tiny "#ifdef __NetBSD__" patch to use fgetln()
on stdin instead, he responded:
------- Begin Included Message
I thought fgets() was POSIX. If it's POSIX, I will continue to use fgets().
However, I will include your NetBSD hint in the README. Thanks.
cristy@dupont.com
------- End of Included Message
(Notice how he says "fgets()" but the program uses "gets()".
What was the final verdict on this? Should I tell him "OK, POSIX uses fgets()
so change your code to `fgets(answer, size, stdin)' instead", or should I
claim righteous indignance to his ignoring the Horrific Security Hole that is
"gets()"? Or should I just not care? :-)
What's the general policy about telling authors about using gets()? Should it
be religious, with "#if defined(__NetBSD__) || defined(PC)"? :-)
- Greg