#2459 Invalid object in [foreach]

obsolete: 8.3.4
closed-duplicate
5
2003-08-31
2003-08-19
No

I have an unknown problem, I don't know enough to give
a proper input in the summary field.

I think it's a problem in the foreach command when
setting the variable.

I have brain-stormed with the eggdrop development
team for a bit on this, and they have not been able to
come up with any ideas.

Since I am unsure exactly what/where the bug is, I
would like to just give you the bugzilla posting for
eggdrop development. It contains some debug plus
some discussion related to the bug.

http://www.eggheads.org/bugzilla/show_bug.cgi?id=352

If there is anything else you require, please contact me.

Carl M. Gregory
http://mc.purehype.net/
mc8@purehype.net

Discussion

  • Nobody/Anonymous

    Logged In: NO

    For people who like to have everything at one place here is
    more info:

    According to gdb backtrace tcl is crashing:
    Here is part of bt:
    #0 0x4007e88c in TclLookupVar () from /usr/lib/libtcl.so
    #1 0x4007f42a in Tcl_SetVar2Ex () from /usr/lib/libtcl.so
    #2 0x4007f3db in Tcl_ObjSetVar2 () from /usr/lib/libtcl.so
    #3 0x4003cbc9 in Tcl_ForeachObjCmd () from /usr/lib/libtcl.so
    #4 0x40051619 in TclExecuteByteCode ()
    from /usr/lib/libtcl.so
    #5 0x400370cf in Tcl_EvalObjEx () from /usr/lib/libtcl.so
    #6 0x400436b0 in Tcl_SwitchObjCmd () from /usr/lib/libtcl.so
    #7 0x40051619 in TclExecuteByteCode ()
    from /usr/lib/libtcl.so

    This crash was on tcl 8.3.4

    Script which is able to reproduce crash (not always):
    http://eggheads.org/bugzilla/attachment.cgi?
    id=43&action=view

    Procedure which makes crash:
    mc:banm:dcc:+banmask

     
  • Nobody/Anonymous

    Logged In: NO

    mu suggestion first was that using temp() (array with empty
    index) in 8.3 or older is reason for crash. But now I'm not that
    sure, what do you think?

     
  • Donal K. Fellows

    • milestone: --> obsolete: 8.3.4
     
  • Donal K. Fellows

    Logged In: YES
    user_id=79902

    Empty index shouldn't be a problem. (I can't run the
    script, as I don't have eggdrop here. I presume the problem
    is triggered by the script and not something in eggdrop
    itself.)

    Step one of trace analysis indicates that problem lies
    inside the setting of a variable by a foreach which is
    directly inside a switch, and so must be at one of:
    line 421, 430, 453, 494, 511, 533, 887

    Which is silly; all those places look good from here. :^(

    Alas, to track this down further will require running in a
    debug build (possibly with debugger attached, or if not that
    then core-dumps turned on) and as I said earlier I've no way
    to run the code here where I have such tools set up.

    The comment in bugzilla by stdarg@yahoo.com about trying to
    use Tcl 8.4 instead of 8.3 is a good one. But even just
    8.3.5 would be better, given that that is what we support in
    some sense. And building from source would give you an
    excellent opportunity to turn on debugging... ;^)

     
  • Carl M. Gregory

    Carl M. Gregory - 2003-08-31

    Logged In: YES
    user_id=826458

    Does this help at all?

    [mc8@RHServer eggdrop]$ gdb eggdrop -c core.4275
    GNU gdb Red Hat Linux (5.3post-0.20021129.18rh)
    Copyright 2003 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public
    License, and you are
    welcome to change it and/or distribute copies of it under
    certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB. Type "show
    warranty" for details.
    This GDB was configured as "i386-redhat-linux-gnu"...

    warning: core file may not match specified executable file.
    Core was generated by `./eggdrop ./mc_test.configs'.
    Program terminated with signal 11, Segmentation fault.
    Reading symbols
    from /home/mc8/debugtcl/lib/libtcl8.3.so...done.
    Loaded symbols for /home/mc8/debugtcl/lib/libtcl8.3.so
    Reading symbols from /lib/tls/libm.so.6...done.
    Loaded symbols for /lib/tls/libm.so.6
    Reading symbols from /lib/libdl.so.2...done.
    Loaded symbols for /lib/libdl.so.2
    Reading symbols from /lib/libnsl.so.1...done.
    Loaded symbols for /lib/libnsl.so.1
    Reading symbols from /lib/tls/libc.so.6...done.
    Loaded symbols for /lib/tls/libc.so.6
    Reading symbols from /lib/ld-linux.so.2...done.
    Loaded symbols for /lib/ld-linux.so.2
    Reading symbols from /lib/libnss_files.so.2...done.
    Loaded symbols for /lib/libnss_files.so.2
    Reading symbols
    from /home/mc8/eggdrop/modules/dns.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/dns.so
    Reading symbols from /lib/libresolv.so.2...done.
    Loaded symbols for /lib/libresolv.so.2
    Reading symbols
    from /home/mc8/eggdrop/modules/channels.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/channels.so
    Reading symbols
    from /home/mc8/eggdrop/modules/server.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/server.so
    Reading symbols
    from /home/mc8/eggdrop/modules/ctcp.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/ctcp.so
    Reading symbols
    from /home/mc8/eggdrop/modules/irc.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/irc.so
    Reading symbols
    from /home/mc8/eggdrop/modules/uptime.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/uptime.so
    Reading symbols
    from /home/mc8/eggdrop/modules/transfer.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/transfer.so
    Reading symbols
    from /home/mc8/eggdrop/modules/share.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/share.so
    Reading symbols
    from /home/mc8/eggdrop/modules/compress.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/compress.so
    Reading symbols from /usr/lib/libz.so.1...done.
    Loaded symbols for /usr/lib/libz.so.1
    Reading symbols
    from /home/mc8/eggdrop/modules/notes.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/notes.so
    Reading symbols
    from /home/mc8/eggdrop/modules/console.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/console.so
    Reading symbols
    from /home/mc8/eggdrop/modules/blowfish.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/blowfish.so
    Reading symbols
    from /home/mc8/eggdrop/modules/assoc.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/assoc.so
    Reading symbols
    from /home/mc8/eggdrop/modules/wire.so...done.
    Loaded symbols for /home/mc8/eggdrop/modules/wire.so
    #0 Tcl_GetString (objPtr=0x61003336)
    at ../generic/tclObj.c:682
    682 if (objPtr->bytes != NULL) {
    (gdb) bt
    #0 Tcl_GetString (objPtr=0x61003336)
    at ../generic/tclObj.c:682
    #1 0x40083da8 in Tcl_ObjSetVar2 (interp=0x8162018,
    part1Ptr=0x61003336, part2Ptr=0x0, newValuePtr=0x81cfc98,
    flags=0)
    at ../generic/tclVar.c:1135
    #2 0x40039ad0 in Tcl_ForeachObjCmd (dummy=0x0,
    interp=0x8162018, objc=4, objv=0x81cfc98)
    at ../generic/tclCmdAH.c:1851
    #3 0x4004f67b in TclExecuteByteCode (interp=0x8162018,
    codePtr=0x81cf0d0) at ../generic/tclExecute.c:877
    #4 0x4003370a in Tcl_EvalObjEx (interp=0x8162018,
    objPtr=0x81bcb70, flags=0) at ../generic/tclBasic.c:2733
    #5 0x40040494 in Tcl_SwitchObjCmd (dummy=0x0,
    interp=0x8162018, objc=18, objv=0x81bac90)
    at ../generic/tclCmdMZ.c:2452
    #6 0x4004f67b in TclExecuteByteCode (interp=0x8162018,
    codePtr=0x81ba960) at ../generic/tclExecute.c:877
    #7 0x4003370a in Tcl_EvalObjEx (interp=0x8162018,
    objPtr=0x8188718, flags=0) at ../generic/tclBasic.c:2733
    #8 0x4007ac1d in TclObjInterpProc (clientData=0x8188c58,
    interp=0x8162018, objc=3, objv=0xbfffbca0)
    at ../generic/tclProc.c:1001
    #9 0x40073884 in EvalObjv (interp=0x8162018, objc=3,
    objv=0xbfffbca0,
    command=0x81c33c8 "mc:banm:list_ add {#abc123 *!*@*
    {MC_8: Testing.}}", length=50, flags=0)
    at ../generic/tclParse.c:932
    #10 0x40073f91 in Tcl_EvalEx (interp=0x8162018,
    script=0x81c33c8 "mc:banm:list_ add {#abc123 *!*@*
    {MC_8: Testing.}}",
    numBytes=50, flags=262144) at ../generic/tclParse.c:1393
    #11 0x400334ea in Tcl_EvalObjEx (interp=0x8162018,
    objPtr=0x81c3c58, flags=262144) at ../generic/tclBasic.c:2580
    #12 0x40038246 in Tcl_EvalObjCmd (dummy=0x0,
    interp=0x8162018, objc=-1073761280, objv=0x0)
    at ../generic/tclCmdAH.c:627
    #13 0x4004f67b in TclExecuteByteCode (interp=0x8162018,
    codePtr=0x81b63d8) at ../generic/tclExecute.c:877
    #14 0x4003370a in Tcl_EvalObjEx (interp=0x8162018,
    objPtr=0x81c6340, flags=0) at ../generic/tclBasic.c:2733
    #15 0x4007ac1d in TclObjInterpProc (clientData=0x81c8b38,
    interp=0x8162018, objc=3, objv=0x8163d9c)
    at ../generic/tclProc.c:1001
    #16 0x4004f67b in TclExecuteByteCode (interp=0x8162018,
    codePtr=0x81b5e20) at ../generic/tclExecute.c:877
    #17 0x4003370a in Tcl_EvalObjEx (interp=0x8162018,
    objPtr=0x81884f8, flags=0) at ../generic/tclBasic.c:2733
    #18 0x4007ac1d in TclObjInterpProc (clientData=0x8188760,
    interp=0x8162018, objc=3, objv=0x8163d8c)
    at ../generic/tclProc.c:1001
    #19 0x4004f67b in TclExecuteByteCode (interp=0x8162018,
    codePtr=0x81c36d8) at ../generic/tclExecute.c:877
    #20 0x4003370a in Tcl_EvalObjEx (interp=0x8162018,
    objPtr=0x8184428, flags=0) at ../generic/tclBasic.c:2733
    #21 0x4007ac1d in TclObjInterpProc (clientData=0x81ab0e0,
    interp=0x8162018, objc=4, objv=0xbfffce90)
    at ../generic/tclProc.c:1001
    #22 0x40073884 in EvalObjv (interp=0x8162018, objc=4,
    objv=0xbfffce90,
    command=0x81ccae0 "mc:banm:dcc:+banmask_ MC_8 7
    {#abc123 *!*@* Testing.}", length=53, flags=0)
    at ../generic/tclParse.c:932
    #23 0x40073f91 in Tcl_EvalEx (interp=0x8162018,
    script=0x81ccae0 "mc:banm:dcc:+banmask_ MC_8 7
    {#abc123 *!*@* Testing.}",
    numBytes=53, flags=262144) at ../generic/tclParse.c:1393
    #24 0x400334ea in Tcl_EvalObjEx (interp=0x8162018,
    objPtr=0x81b6660, flags=262144) at ../generic/tclBasic.c:2580
    #25 0x40038246 in Tcl_EvalObjCmd (dummy=0x0,
    interp=0x8162018, objc=-1073761280, objv=0x0)
    at ../generic/tclCmdAH.c:627
    #26 0x4004f67b in TclExecuteByteCode (interp=0x8162018,
    codePtr=0x81b63d8) at ../generic/tclExecute.c:877
    #27 0x4003370a in Tcl_EvalObjEx (interp=0x8162018,
    objPtr=0x81c6340, flags=0) at ../generic/tclBasic.c:2733
    #28 0x4007ac1d in TclObjInterpProc (clientData=0x81c8b38,
    interp=0x8162018, objc=3, objv=0x8163d74)
    at ../generic/tclProc.c:1001
    #29 0x4004f67b in TclExecuteByteCode (interp=0x8162018,
    codePtr=0x81c01a8) at ../generic/tclExecute.c:877
    #30 0x4003370a in Tcl_EvalObjEx (interp=0x8162018,
    objPtr=0x81c8398, flags=0) at ../generic/tclBasic.c:2733
    #31 0x4007ac1d in TclObjInterpProc (clientData=0x81ab160,
    interp=0x8162018, objc=4, objv=0xbfffdba0)
    at ../generic/tclProc.c:1001
    #32 0x40073884 in EvalObjv (interp=0x8162018, objc=4,
    objv=0xbfffdba0,
    command=0xbfffdddc "mc:banm:dcc:+banmask $_dcc1
    $_dcc2 $_dcc3", length=41, flags=0)
    at ../generic/tclParse.c:932
    #33 0x40073f91 in Tcl_EvalEx (interp=0x8162018,
    script=0xbfffdddc "mc:banm:dcc:+banmask $_dcc1 $_dcc2
    $_dcc3", numBytes=41,
    flags=0) at ../generic/tclParse.c:1393
    #34 0x400742e4 in Tcl_Eval (interp=0x8162018,
    string=0xbfffdddc "mc:banm:dcc:+banmask $_dcc1 $_dcc2
    $_dcc3")
    at ../generic/tclParse.c:1548
    #35 0x40034f65 in Tcl_VarEvalVA (interp=0x8162018,
    argList=0xbfffdf00 "\234\032\b|\b\b\002")
    at ../generic/tclBasic.c:4081
    #36 0x40034f9e in Tcl_VarEval (arg1=0x8162018)
    at ../generic/tclBasic.c:4112
    #37 0x080760d2 in trigger_bind
    (proc=0x81b11e8 "mc:banm:dcc:+banmask",
    param=0x808a532 " $_dcc1 $_dcc2 $_dcc3") at tclhash.c:687
    #38 0x080765d7 in check_tcl_dcc
    (cmd=0xbfffe1e1 "+banmask", idx=3,
    args=0xbfffe1ea "#abc123 *!*@* Testing.") at tclhash.c:840
    ---Type <return> to continue, or q <return> to quit---
    #39 0x080606a4 in dcc_chat (idx=3,
    buf=0xbfffe1ea "#abc123 *!*@* Testing.", i=32) at dcc.c:916
    #40 0x08069beb in main (argc=2, argv=0xbfffe454) at
    main.c:1003
    #41 0x420156a4 in __libc_start_main () from /lib/tls/libc.so.6
    (gdb) quit

     
  • Donal K. Fellows

    • summary: Unknown problem. --> Invalid object in [foreach]
    • status: open --> closed-duplicate
     
  • Donal K. Fellows

    Logged In: YES
    user_id=79902

    That's odd. An invalid object being passed to
    Tcl_ObjSetVar2 that looks like it is string data? I suspect
    that this might mean we have a duplicate of Tcl Bug #494348
    on our hands, which was never fixed in the 8.3 releases.
    Please upgrade to 8.4 which fixes this problem (I believe).
    Or if it doesn't, please comment further in *this* bug
    report so I can track down the problem.

    http://sf.net/tracker/?func=detail&atid=110894&aid=494348&group_id=10894

     

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

Sign up for the SourceForge newsletter:





No, thanks