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:
- fcmd.diff [download] added by vincentdarley on 2004-09-03 16:07:03. [details]