home *** CD-ROM | disk | FTP | other *** search
- Xref: sparky comp.lang.tcl:2252 gnu.gcc.bug:3057
- Path: sparky!uunet!spool.mu.edu!olivea!mintaka.lcs.mit.edu!ai-lab!prep.ai.mit.edu!gnulists
- From: madere@austin.ibm.com (Steve Madere)
- Newsgroups: comp.lang.tcl,gnu.gcc.bug
- Subject: Tcl 6.4 Tcl_ParseVar bug OR gcc 2.2.2 bug?
- Message-ID: <BzMCBy.2IB7@austin.ibm.com>
- Date: 21 Dec 92 16:55:10 GMT
- Followup-To: comp.lang.tcl,gnu.gcc.bug
- Organization: IBM Austin
- Lines: 67
- Approved: info-gnu@prep.ai.mit.edu
- To: gnu-gcc-bug@uunet.uu.net
- Originator: madere@julius.austin.ibm.com
-
- When I call Tcl_Eval() repeatedly using string constants as code
- arguments, it causes a segmentation violation. This occurs when
- Tcl_ParseVar overwrites individual characters of my string constant
- with a null (to mark the end of a local string) during parsing.
-
-
- The following code causes a segmentation violation in Tcl_ParseVar:
- I am using gcc 2.2.2 on an RS6000.
-
-
- Tcl_Eval(interp, "proc process_query {query} {\n"\
- " set qnum [lindex $query 0]\n"\
- " set request [lindex $query 1]\n"\
- " puts stdout \"query is $query\"\n"\
- " puts stdout \"qnum is $qnum\"\n"\
- " puts stdout \"request is $request\"\n"\
- " set result [eval $request]\n"\
- " puts stdout \"result is $result\"\n"\
- " return [list $qnum $result]\n"\
- "}\n",0,NULL);
- Tcl_Eval(interp, "set result [process_query $query]\n",0,NULL);
- Tcl_Eval("ksend $queue_server queue_result $result\n",0,NULL);
-
- -----------
-
- segmentation violation at tclParse.c: 1165
- *name1End = 0;
-
- -----------
-
- However, when I merely change to using "malloced" memory to hold
- my code fragments. Everything works fine.
-
- c1=strdup("proc process_query {query} {\n"\
- " set qnum [lindex $query 0]\n"\
- " set request [lindex $query 1]\n"\
- " puts stdout \"query is $query\"\n"\
- " puts stdout \"qnum is $qnum\"\n"\
- " puts stdout \"request is $request\"\n"\
- " set result [eval $request]\n"\
- " puts stdout \"result is $result\"\n"\
- " return [list $qnum $result]\n"\
- "}\n");
- c2=strdup("set result [process_query $query]\n");
- c3=strdup("ksend $queue_server queue_result $result\n");
-
- Tcl_Eval(interp,c1,0,NULL);
- Tcl_Eval(interp,c2,0,NULL);
- Tcl_Eval(interp,c3,0,NULL);
-
- -------------
-
- The man page for Tcl_Eval() does not warn the user about this
- sort of problem. Should I never pass a string constant to this
- function or has my C compiler gone bonkers?
-
-
- My inbound mail is temporarily messed up so please post replies.
-
- Thanks.
-
- Steve Madere
- --
-
- Steve Madere
- (Do not reply with R! use the following address)
- madere%aixserv@uunet.uu.net
-