#2852 Problem in file copy

obsolete: 8.5a1
closed-fixed
9
2004-09-03
2004-09-01
No

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.

Discussion

  • Franco Violi

    Franco Violi - 2004-09-02

    Logged In: YES
    user_id=102771

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

     
  • Donal K. Fellows

    • labels: --> 104242
    • assigned_to: nobody --> vincentdarley
    • priority: 5 --> 9
    • milestone: --> obsolete: 8.5a1
     
  • Vince Darley

    Vince Darley - 2004-09-02

    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!

     
  • Franco Violi

    Franco Violi - 2004-09-03

    Logged In: YES
    user_id=102771

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

     
  • Franco Violi

    Franco Violi - 2004-09-03

    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 ()

     
  • Vince Darley

    Vince Darley - 2004-09-03

    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.

     
  • Vince Darley

    Vince Darley - 2004-09-03
    • assigned_to: vincentdarley --> msofer
    • labels: 104242 --> 104254
     
  • Donal K. Fellows

    • assigned_to: msofer --> vincentdarley
    • labels: 104254 --> 24. Channel Commands
     
  • Donal K. Fellows

    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...

     
  • Donal K. Fellows

    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... :^)

     
  • Vince Darley

    Vince Darley - 2004-09-03
    • assigned_to: vincentdarley --> dkf
     
  • Vince Darley

    Vince Darley - 2004-09-03

    diff -u with windows eols

     
  • Vince Darley

    Vince Darley - 2004-09-03

    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).

     
  • Donal K. Fellows

    • status: open --> closed-fixed
     
  • Donal K. Fellows

    Logged In: YES
    user_id=79902

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

     

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks