Re: Possible bug in Tcl.pm exposed by Tktable?

[email protected] (Christopher Chavez) Wed, 8 Apr 2020 05:03:16 -0500
Newsgroups perl.tcltk
Message-ID <[email protected]>
On 4/7/2020 3:05 AM, Konovalov, Vadim wrote:
> As a workaround, you can define this environment variable in Perl, then =
error goes away:
>
> vad@bonita:~$ perl -MTcl -we '$ENV{FOO}=3D"x";my $i=3Dnew Tcl;$i->Eval("=
set env(FOO) bar");print qq/ok\n/'
> ok

I have not yet given this a try, but does this mean having to
first set the exact environment variable Tcl sets, or is it
that *any* environment variable needs to be set first from Perl?

> Tcl uses "ckalloc" function to allocate strings for name of environment =
variable "FOO" (or a value?)
> This 'ckalloc' is their helper function, which chains memory into link, =
so to free it after all.
>
> IMO If they just use "malloc" the problem will go away.
> I haven't verified this assumption, but 85%-sure of it =F0=9F=98=8A

Because I compiled with -DPURIFY I've already verified this won't
make a difference.

Without manually defining TCL_MEM_DEBUG, ckalloc() is Tcl_Alloc(),
and Tcl_Alloc() uses TclpAlloc() directly.
Defining PURIFY undefines USE_TCLALLOC, making TclpAlloc()
use malloc() directly.

This is evident in the valgrind stack trace I posted 2020-03-17.

Thanks
Christopher A. Chavez