Tcl Source Code

View Ticket
Login
Ticket UUID: 878333
Title: workaround for buggy(??) mkstemp() on IRIX systems
Type: Bug Version: obsolete: 8.4.5
Submitter: sussner Created on: 2004-01-16 15:25:54
Subsystem: 37. File System Assigned To: dkf
Priority: 8 Severity:
Status: Closed Last Modified: 2009-01-02 23:47:22
Resolution: Fixed Closed By: dkf
    Closed on: 2009-01-02 16:47:22
Description:
This bug concerns only IRIX systems (6.5.19m) so far.

Using a tclkit with included dynamic libraries results
in the following
error message when loading a second dynamic library
from the vfs:

> tclkit-irix
% package require Itcl
3.3
% package require Tk
couldn't find procedure Tk_Init
%

I tracked it down to the temporary filename create
mkstemp() in
TclpTempFileName() in tclUnixPipe.c. mkstemp() always
uses the
same filename, but keeps the content of the first file
copied into
it. I.e. a second call of TclCrossFilesystemCopy()
means that the
content of the first call is still present causing
TclpFindSymbol() not
to find the <EXT>_Init() procedure.
Adding a counter to the temporary filename solves this
problem. I
submit a patch as well.

hope that helps

gerd

ps: i just wonder whether i am the first one, using
tclkits under IRIX.
User Comments: dkf added on 2009-01-02 23:47:22:
Now that we have compat/mkstemp.c, fix is trivial. Done for 8.6 release.

r_zaumseil added on 2007-03-05 16:31:15:
Logged In: YES 
user_id=1735474
Originator: NO

I had the same problems in creating and using tclkits under IRIX.
To avoid this I had to manually patch the tcl sources.

Why not add the patch for IRIX?

rene
[email protected]

jenglish added on 2006-03-11 00:49:56:
Logged In: YES 
user_id=68433

Still not fixed.  The TIP#210 implementation will provide
what's needed to solve the problem.

dgp added on 2006-03-10 13:48:17:
Logged In: YES 
user_id=80530


status?

jenglish added on 2004-02-24 02:28:49:
Logged In: YES 
user_id=68433

Changing the API to return an open channel handle as well as
the filename would also work (just that it's usually good
practice to change the name of a function when you change
its semantics).

But TclpTempFileName() as currently specified cannot be
implemented correctly and cannot be used safely.

dkf added on 2004-02-23 18:50:09:
Logged In: YES 
user_id=79902

AIUI, what we need to do is to get the temporary file name
back and at the same time have the temporary file open for
modification (keeping it open stops some security-related
race conditions).

BTW, I think I do not agree with removing TclpTempFileName()
(though altering its API sounds like a good thing) since it
might well end up being useful elsewhere in the core in the
future (e.g. for loading Win icons and cursors from starkits.)

vincentdarley added on 2004-02-23 18:11:46:
Logged In: YES 
user_id=32170

It looks as if Tcl_FSLoadFile doesn't mind if the return
value of TclpTempFileName exists or not, so perhaps that
function can be changed not to delete the file?  Or it
should be changed to ensure it always creates a new empty
name with an empty file?

I don't quite understand what Joe is suggesting...  How can
we get rid of TclpTempFileName()?  It's needed by
Tcl_FSLoadFile...  I can understand that we might want to
fix TclpTempFileName() and/or adjust how it is called, what
it returns, but _remove_ it !?!?

jenglish added on 2004-02-21 06:24:20:
Logged In: YES 
user_id=68433

It looks like Tcl_FSLoadFile() is the only caller of
TclpTempFileName() in the core.  This should be fixed, and
TclpTempFileName() removed.  Back to you, Vince!

jenglish added on 2004-02-21 06:10:37:
Logged In: YES 
user_id=68433

This looks more like a bug in TclpTempFileName() -- it calls
mkstemp() to generate a temporary file, but then deletes the
file and closes the file descriptor.  So a subsequent call
to mkstemp() can use the same filename, as it's still unique.

As a matter of fact, TclpTempFileName() is Broken As
Designed: there is no safe way to generate a temporary file
name without creating the file at the same time; otherwise
you suffer a race condition.

dkf added on 2004-01-17 08:10:07:
Logged In: YES 
user_id=79902

Assigning to myself because I've got access to IRIX systems

vincentdarley added on 2004-01-17 07:16:19:
Logged In: YES 
user_id=32170

Assigned to someone who knows more about Unix ;-)

sussner added on 2004-01-16 22:25:55:

File Added - 73709: tclUnixPipe.diff

Attachments: