Tcl Source Code

View Ticket
Login
Ticket UUID: 1020538
Title: Problem in file copy
Type: Bug Version: obsolete: 8.5a1
Submitter: effevi Created on: 2004-09-01 16:39:28
Subsystem: 24. Channel Commands Assigned To: dkf
Priority: 9 Immediate Severity:
Status: Closed Last Modified: 2004-09-03 18:00:14
Resolution: Fixed Closed By: dkf
    Closed on: 2004-09-03 11:00:14
Description:
On tcl version 8.5.a1, under Linux, I got the following problem 
 
In this situation (this is the ls -l command on the two files) 
 
-r--r--r--  1 prjadmin metodo 0 set  1 18:23 /tmp/one 
-rw-rw-r--  1 piera    metodo 0 set  1 18:23 /tmp/two 
This script 
 
file copy -force /tmp/one /tmp/two 
 
gets into "Segmentation fault (core dumped)" 
if the command is issued with my user 
 
uid=2000(effevi) gid=500(metodo) gruppi=500
(metodo),30000(programmatori),2000(effevi) 
 
This is the version of my compiler 
 
gcc (GCC) 3.3.2 (Mandrake Linux 10.0 3.3.2-6mdk) 
Copyright (C) 2003 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions.  
There is NO 
warranty; not even for MERCHANTABILITY or FITNESS 
FOR A PARTICULAR PURPOSE. 
 
It seems that, while trying to setting owner and group (for 
user effevi it is not possibile) the call gets in fault.
User Comments: dkf added on 2004-09-03 18:00:14:
Logged In: YES 
user_id=79902

Fixed. No test because any test I could write would be
utterly non-portable.

vincentdarley added on 2004-09-03 16:07:03:

File Added - 100211: fcmd.diff

Logged In: YES 
user_id=32170

That sounds right to me.  Here's a suggested patch.  Please
do test and commit if successful.

We ought to add tests for this, but that will require
someone with Unix expertise (i.e. not me).

dkf added on 2004-09-03 15:50:31:
Logged In: YES 
user_id=79902

Further analysis indicates that the problem is not present
on the 8.4 branch because there is no attempt to adjust
permissions, so at least there isn't a backport problem... :^)

dkf added on 2004-09-03 15:47:44:
Logged In: YES 
user_id=79902

Yuck. The problem is that the call to Tcl_FSFileAttrsSet()
in CopyRenameOneFile() (in tclFCmd.c) passes in a NULL
interp, but an error happened and we're trying to store the
error message in a variable looked up from that NULL...

Suggested fix: make SetPermissionsAttribute() in
tclUnixFCmd.c only report an error when interp is non-NULL.
For safety, we need to protect all three points that can
generate error messages, probably with:
  if (interp != NULL) {
     Tcl_AppendResult(...);
  }

Do you concur with my analysis, Vince?  I'm assigning back
to you because 'cvs annotate' says you've poked around in
relevant areas in both files...

vincentdarley added on 2004-09-03 15:15:58:
Logged In: YES 
user_id=32170

Well, the crash seems to be in some "Var" handling code, so
I'm reassigning to a different area.

effevi added on 2004-09-03 14:06:28:
Logged In: YES 
user_id=102771

It was already compiled with symbols. This is the stack. 
 
Program received signal SIGSEGV, Segmentation fault. 
0x400a4e42 in TclLookupSimpleVar () 
from /opt/Tng/lib/libtcl8.5.so 
 
 
#0  0x400a4e42 in TclLookupSimpleVar () 
from /opt/Tng/lib/libtcl8.5.so 
#1  0x400a48d3 in TclLookupVar () 
from /opt/Tng/lib/libtcl8.5.so 
#2  0x400a5799 in Tcl_SetVar2Ex () 
from /opt/Tng/lib/libtcl8.5.so 
#3  0x400a571e in Tcl_SetVar2 () 
from /opt/Tng/lib/libtcl8.5.so 
#4  0x40099d85 in Tcl_SetErrorCodeVA () 
from /opt/Tng/lib/libtcl8.5.so 
#5  0x40099dd0 in Tcl_SetErrorCode () 
from /opt/Tng/lib/libtcl8.5.so 
#6  0x4007ef72 in Tcl_PosixError () 
from /opt/Tng/lib/libtcl8.5.so 
#7  0x400ac81d in SetPermissionsAttribute () 
from /opt/Tng/lib/libtcl8.5.so 
#8  0x4007f53b in NativeFileAttrsSet () 
from /opt/Tng/lib/libtcl8.5.so 
#9  0x4007f62a in Tcl_FSFileAttrsSet () 
from /opt/Tng/lib/libtcl8.5.so 
#10 0x4006c8ce in CopyRenameOneFile () 
from /opt/Tng/lib/libtcl8.5.so 
#11 0x4006bbda in FileCopyRename () 
from /opt/Tng/lib/libtcl8.5.so 
#12 0x4006ba88 in TclFileCopyCmd () 
from /opt/Tng/lib/libtcl8.5.so 
#13 0x40040417 in Tcl_FileObjCmd () 
from /opt/Tng/lib/libtcl8.5.so 
#14 0x4003a9ae in TclEvalObjvInternal () 
from /opt/Tng/lib/libtcl8.5.so 
#15 0x4003b255 in Tcl_EvalEx () 
from /opt/Tng/lib/libtcl8.5.so 
#16 0x4007ed44 in Tcl_FSEvalFileEx () 
from /opt/Tng/lib/libtcl8.5.so 
#17 0x40084b23 in Tcl_Main () from /opt/Tng/lib/libtcl8.5.so 
#18 0x080486e9 in main ()

effevi added on 2004-09-03 13:59:36:
Logged In: YES 
user_id=102771

Ok. I will do it as soon as possible, this evening Italian time. 
Thanks.

vincentdarley added on 2004-09-02 15:14:56:
Logged In: YES 
user_id=32170

I can't do much about this with a real stack trace from your
debugger.  Can you compile with debug symbols and try again,
please?

thanks!

effevi added on 2004-09-02 12:22:53:
Logged In: YES 
user_id=102771

Sorry, not "while trying to setting owner and group" but "while 
trying to change permissions".

Attachments: