Skip to content

#914 Warning: the use of `tmpnam' is dangerous, better use `mkstemp'

Metadata

Property Value
Reported by Patrick Leidenberger (mailings.pl@gmail.com)
Reported at May 12, 2011 05:34
Type Bug Report
Version Git (pre2.4) [autotools]
Operating System Unspecified / All
Last edited by Patrick Leidenberger (mailings.pl@gmail.com)
Last edited at May 12, 2011 06:16
Closed by Patrick Leidenberger (mailings.pl@gmail.com)
Closed at May 12, 2011 06:16
Closed in version Unknown
Resolution Duplicate
Comment Hi Christian, thanks for the tip with #912 (closed). I missed, that there is already a discussion ongoing.

Description

Hi all,

compiling my code, which uses the dgfparser, I got the warning: warning: the use of tmpnam' is dangerous, better use mkstemp' from the compiler. This warning is related to: io/file/dgfparser/dgfparser.cc:1082: char buffer[ L_tmpnam ]; // supply buffer to make it thread safe io/file/dgfparser/dgfparser.cc:1083: return std::string( std::tmpnam( buffer ) ); and as far as I see, Martin introduced this in rev 7326.

Because I didn't know tmpnam I googled it and found some controverse discusstions:

[http://bytes.com/topic/c/answers/222683-tmpnam]: Race conditions: tmpnam() generates a file name that is not in use at the moment of the call, but there's no guarantee that some other program might not create such a file two nanoseconds later, before you get a chance to use the name tmpnam() built for you.

Security holes: It's at least conceivable that the race condition mentioned above could be exploited as part of a penetration of privilege barriers.

[http://www.cygwin.com/ml/libc-alpha/2000-11/msg00184.html] No, you can use tmpnam' safely by opening the returned file name with O_CREAT|O_EXCL. This is similar to what mkstemp' does internally. I've seen applications that do this for portability reasons, as `mkstemp' is not universally supported.

Can you please comment on your change and whats its impact?

My system: Standart Ubuntu 10.10 x64 with g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5

Have a nice day Patrick