> https://rt.cpan.org/Ticket/Display.html?id=132278
> >
> > Can you open the ticket on Tcl.pm, given that we see that it is more 
> > relevant here?
> 
> I have moved the existing ticket to keep the reporter informed.
> I meant to adjust the title as well but couldn't do so once it moved.

Cool! Thank you!
> 
> > I will work on the fix, when time permits
> 
> Thanks. Indeed there should be no rush to fix this. It
> is a benign issue that might only pose a minor annoyance to users (e.g. "Your
> program has crashed, report it?" nags from OS); unsaved data does not appear 
> to
> be in jeopardy because of it.

As a workaround, you can define this environment variable in Perl, then error 
goes away:

vad@bonita:~$ perl -MTcl -we '$ENV{FOO}="x";my $i=new Tcl;$i->Eval("set 
env(FOO) bar");print qq/ok\n/'
ok

OTOH error message differs a bit whether or not we 'unset' this environment 
variable within tcl:

vad@bonita:~$ perl -MTcl -we 'my $i=new Tcl;$i->Eval("set env(FOO) bar;unset 
env(FOO)");END{print qq/in END\n/}print qq/after all\n/'
after all
in END
double free or corruption (!prev)
Aborted (core dumped)
vad@bonita:~$ perl -MTcl -we 'my $i=new Tcl;$i->Eval("set env(FOO) 
bar");END{print qq/in END\n/}print qq/after all\n/'              
after all
in END
free(): invalid size
Aborted (core dumped)

When Perl uses $ENV{FOO} *after* tcl then there is error again:

vad@bonita:~$ perl -MTcl -we 'my $i=new Tcl;$i->Eval("set env(FOO) 
bar");$ENV{FOO}="bar";print qq/ok\n/'
free(): invalid size
Aborted (core dumped)
vad@bonita:~$ perl -MTcl -we 'my $i=new Tcl;$i->Eval("set env(FOO) bar");print 
qq/ok\n/'
ok
free(): invalid size
Aborted (core dumped)
vad@bonita:~$

vad@bonita:~$ perl -MTcl -we 'my $i=new Tcl;$i->Init;$i->Eval("set env(FOO) 
bar");delete $ENV{FOO};print qq/deleted FOO\n/'
free(): invalid size
Aborted (core dumped)

vad@bonita:~$ perl -MTcl -we 'my $i=new Tcl;$i->Init;$i->Eval("set env(FOO) 
bar;unset env(FOO)");END{print qq/in END\n/}print qq/after all\n/'
after all
in END
double free or corruption (!prev)
Aborted (core dumped)
vad@bonita:~$

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 😊

TODO list:
[x] find temporary workaround
[ ] see whether it is possible to redefine Tcl_PutEnv in Tcl.
[ ] profit
 
regards,
Vadim

Reply via email to