[Rd] [External] use of the tcltk package crashes R 4.0.1 for Windows

peter dalgaard pd@|gd @end|ng |rom gm@||@com
Sun Jun 7 19:07:34 CEST 2020



> On 7 Jun 2020, at 17:53 , luke-tierney using uiowa.edu wrote:
> 
> On Sun, 7 Jun 2020, peter dalgaard wrote:
> 
>> So this wasn't tested for a month?
>> 
>> Anyways, Free() is just free() with a check that we're not freeing a null pointer, followed by setting the pointer to NULL. At that point of tcltk.c, we have
>> 
>>  for (objc = i = 0; i < length(avec); i++){
>>       const char *s;
>>       char *tmp;
>>       if (!isNull(nm) && strlen(s = translateChar(STRING_ELT(nm, i)))){
>>           //  tmp = calloc(strlen(s)+2, sizeof(char));
>>           tmp = Calloc(strlen(s)+2, char);
>>           *tmp = '-';
>>           strcpy(tmp+1, s);
>>           objv[objc++] = Tcl_NewStringObj(tmp, -1);
>>           free(tmp);
>>       }
>>       if (!isNull(t = VECTOR_ELT(avec, i)))
>>           objv[objc++] = (Tcl_Obj *) R_ExternalPtrAddr(t);
>>   }
>> 
>> and I can't see how tmp can be NULL at the free(), nor can I see it mattering if it is not set to NULL (notice that it goes out of scope with the for loop).
> 
> Right. And the calloc->Calloc change doesn't look like an issue either
> -- just checking for a NULL.
> 
> If the crash is happening in free() then that most likely means
> corrupted malloc data structures. Unfortunately that could be
> happening anywhere.
> 
> Best bet to narrow this down is for someone with a good Windows setup
> who can reproduce this to bisect the svn commits and see at what
> commit this started happening. Unfortunately my office Windows machine
> isn't responding and it will probably take some time to get that
> fixed.

Also, it is possible that the issue is really a line or two earlier, so it would be good to get in with a debugger and see what is actually in *tmp and objv[objc++] at the point of the crash. 

Also, Tcl_NewStringObj(tmp, -1) obviously must allocate, but it would be rather odd if it didn't use the system allocator (Tcl is designed to be embeddable, the only strange thing R does in that respect is the marriage of the two event loops).

-pd


> 
> Best,
> 
> luke
> 
>> 
>> -pd
>> 
>> 
>>> On 7 Jun 2020, at 16:00 , Jeroen Ooms <jeroenooms using gmail.com> wrote:
>>> 
>>> On Sun, Jun 7, 2020 at 3:13 AM Fox, John <jfox using mcmaster.ca> wrote:
>>>> 
>>>> Hi,
>>>> 
>>>> The following code, from the examples in ?TkWidgets , immediately crashes R 4.0.1 for Windows:
>>>> 
>>>> --------------------- snip --------------------
>>>> library("tcltk")
>>>> tt <- tktoplevel()
>>>> label.widget <- tklabel(tt, text = "Hello, World!")
>>>> button.widget <- tkbutton(tt, text = "Push",
>>>>        command = function()cat("OW!\n"))
>>>> tkpack(label.widget, button.widget) # geometry manager
>>>> --------------------- snip --------------------
>>> 
>>> 
>>> I can reproduce this. The backtrace shows the crash happens in
>>> dotTclObjv  [/src/library/tcltk/src/tcltk.c using 243 ]. This looks like a
>>> bug that was introduced by commit 78408/78409 about a month ago. I
>>> think the problem is that this commit changes 'calloc' to 'Calloc'
>>> without changing the corresponding 'free' to 'Free'.
>>> 
>>> This has nothing to do with the Windows build or installation. Nothing
>>> has changed in the windows build procedure between 4.0.0 and 4.0.1.
>>> 
>>> ______________________________________________
>>> R-devel using r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> 
>> 
> 
> -- 
> Luke Tierney
> Ralph E. Wareham Professor of Mathematical Sciences
> University of Iowa                  Phone:             319-335-3386
> Department of Statistics and        Fax:               319-335-3017
>   Actuarial Science
> 241 Schaeffer Hall                  email:   luke-tierney using uiowa.edu
> Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu

-- 
Peter Dalgaard, Professor,
Center for Statistics, Copenhagen Business School
Solbjerg Plads 3, 2000 Frederiksberg, Denmark
Phone: (+45)38153501
Office: A 4.23
Email: pd.mes using cbs.dk  Priv: PDalgd using gmail.com



More information about the R-devel mailing list