Hi!
Patch looks, sounds and runs good; similar (correct) code is already in

char **Dbg_ArgcArgv(argc,argv,copy)
...             main_argv = alloc = (char **)ckalloc((argc+1)*sizeof(char
*));


>From my initial tests, this has corrected a nasty segmentation fault that
occurred sometimes inside the debugger. 
If you don't already know, I have a modification to enable debugging inside
the TKCon console
http://tagus.inesc-id.pt/~pestrela/ns2/ns2_debugging2.html


I'm forwarding this patch to the ns-developers list
Pedro Vale Estrela

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf
> Of Christian Walter
> Sent: terça-feira, 5 de Setembro de 2006 17:35
> To: ns-users@ISI.EDU
> Subject: [ns] [bug] tcl-debugger segfaults when printing stack ('w')
> 
> 
> [Bug Report]
> 
> -----------------------------
> Category:  Run Time - Segmentation Fault
> Package:   other tcl-debug-2.0
> OS:        RHEL4/OTHERS
> Environment Variables:
> 
> 
> -----------------------------
> Description:
> 
> Description of Problem:
> 
> The tcl debugger tcl-debug 2.0 from Don Libes contains a bug in the
> function print_objc (Dbg.c:445) where not enough memory is allocated. The
> variable argv[] should hold an array of char * pointers. The call to
> malloc misses parentheses around objc + 1 and allocates insufficient
> memory.
> A recent GLIBC as well as valgrind detect the error and aborts program
> execution. As a consequence the simulator execution is aborted by the
> system environment.
> 
> How Easily Reproducible: every time
> 
> Steps to Reproduce:
> 1. Start ns2
> 2. Enter 'debug 1'
> 3. Hit s until the stack has at least two elements. starting ns and using
> 's' three or more time is sufficient.
> 3. Simply execute some commands where you should use 'w' multiple times.
> valgrind will immediately detect it. glibc runtime checks sometimes.
> 
> Requirements:
> Ns compiled with --with-debug and tcl-debug. In addition the following
> system components/libraries are of interest:
> 
> Linux: CentOS release 4.4
> GLIBC: glibc-2.3.4-2.25
> valgrind: valgrind-3.1.1-1.EL4
> 
> Actual Results:
> 
> GLIBC:
> dbg2.7> w
>  0: application
> *1: history {add} {s
> }
>  2: llength {add {s
> }}
> dbg2.8> w
> *** glibc detected *** malloc(): memory corruption (fast): 0x08629bf8 ***
> Aborted
> 
> VALGRIND:
> 
> dbg2.6> s
> 2: set len [llength $args]
> dbg2.7> w
>  0: application
> ==12203== Invalid write of size 4
> ==12203==    at 0x8242DFB: print_objv (Dbg.c:445)
> ==12203==    by 0x8242EB5: PrintStackBelow (Dbg.c:469)
> ==12203==    by 0x8242EED: PrintStack (Dbg.c:488)
> ==12203==    by 0x82432E5: debugger_trap (Dbg.c:696)
> 
> Expected Results:
> No output
> 
> Additional Information:
> Patch is supplied below:
> --- Dbg.c.orig  2000-08-16 00:09:30.000000000 +0200
> +++ Dbg.c       2006-09-05 17:05:43.000000000 +0200
> @@ -440,7 +440,7 @@
>      char **argv;
>      int argc;
>      int len;
> -    argv = (char **)ckalloc(objc+1 * sizeof(char *));
> +    argv = (char **)ckalloc((objc + 1) * sizeof(char *));
>      for (argc=0 ; argc<objc ; argc++) {
>         argv[argc] = Tcl_GetStringFromObj(objv[argc],&len);
>      }
> 
> Kind regards,
>   Christian Walter


Reply via email to