[Rd] Resizing a named vector crashes R with gctorture(TRUE) (PR#13837)

murdoch at stats.uwo.ca murdoch at stats.uwo.ca
Thu Jul 16 02:45:15 CEST 2009


On 15/07/2009 8:30 PM, murdoch at stats.uwo.ca wrote:
> On 15/07/2009 8:08 PM, Hervé Pagès wrote:
>> Hi,
>>
>>    > x <- c(a=10, b=20)
>>    > length(x) <- 1
>>    > x
>>     a
>>    10
>>
>> But with gctorture turned on, I get:
>>
>>    > gctorture(TRUE)
>>    > x <- c(a=10, b=20)
>>    > length(x) <- 1
>>    > x
>>      a
>>    "a"   <---- ???
>>
>>    > x <- c(a=10, b=20)
>>    > length(x) <- 3
>>
>>     *** caught segfault ***
>>    address (nil), cause 'unknown'
>>
>>    Possible actions:
>>    1: abort (with core dump, if enabled)
>>    2: normal R exit
>>    3: exit R without saving workspace
>>    4: exit R saving workspace
>>
>> This seems to have been around for a while (I get this with R 2.10,
>> 2.9 and 2.8). Note that I don't get this with an unnamed vector.
>>
>> This problem affects the methods package. I found it while
>> troubleshooting the "Protection stack overflow" I reported earlier
>> (see https://stat.ethz.ch/pipermail/r-devel/2009-July/054030.html)
>> but I can't tell yet whether the 2 issues are related or not.
> 
> That's clearly a bug (reproducible in today's R-devel build); I've cc'd 
> this reply to r-bugs.  I'll take a look and see if I can track it down.

That's got to be the easiest low-level bug I've worked on in a while. 
Just a missing PROTECT.  Now fixed, about to be committed to R-devel.

Duncan Murdoch

> 
>> It would be nice to see some reaction from the R developers
>> about these issues. Thanks in advance!
> 
> You should post them as bug reports if they are as clearly bugs as this 
> one; otherwise they can easily get lost in the noise.  I'm not going to 
> offer to look into the other one; I don't know the insides of the 
> methods package.
> 
> Duncan Murdoch
> 
>> H.
>>
>>
>> hpages at fhcrc.org wrote:
>>> Hi,
>>>
>>>   > gctorture(TRUE)
>>>   > setGeneric("foo", function(x, y) standardGeneric("foo"))
>>>   [1] "foo"
>>>   > setMethod("foo", c("ANY", "ANY"),
>>>   +   function(x, y) cat("calling foo,ANY,ANY method\n")
>>>   + )
>>>   Error: protect(): protection stack overflow
>>>
>>> Sorry this is something I already reported one week ago here
>>>   https://stat.ethz.ch/pipermail/r-devel/2009-July/053973.html
>>> but I just had a 2nd look at it and realized that the problem
>>> can in fact be reproduced out of the .onLoad() hook. So I'm
>>> reporting it again with a different subject.
>>>
>>> See my sessionInfo() below. Thanks!
>>> H.
>>>
>>>
>>>> sessionInfo()
>>> R version 2.10.0 Under development (unstable) (2009-06-26 r48837)
>>> x86_64-unknown-linux-gnu
>>>
>>> locale:
>>>  [1] LC_CTYPE=en_CA.UTF-8       LC_NUMERIC=C
>>>  [3] LC_TIME=en_CA.UTF-8        LC_COLLATE=en_CA.UTF-8
>>>  [5] LC_MONETARY=C              LC_MESSAGES=en_CA.UTF-8
>>>  [7] LC_PAPER=en_CA.UTF-8       LC_NAME=C
>>>  [9] LC_ADDRESS=C               LC_TELEPHONE=C
>>> [11] LC_MEASUREMENT=en_CA.UTF-8 LC_IDENTIFICATION=C
>>>
>>> attached base packages:
>>> [1] stats     graphics  grDevices utils     datasets  methods   base
>>>
>>> ______________________________________________
>>> R-devel at r-project.org mailing list
>>> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list