From ripley at stats.ox.ac.uk  Sat Apr 30 12:16:58 2005
From: ripley at stats.ox.ac.uk (Prof Brian Ripley)
Date: Sat Apr 30 12:19:19 2005
Subject: (PR#7826) [Rd] segfault during build of 2.1.0 on RH9;
	print.POSIXct
In-Reply-To: <20050430094719.918BBA1CA@slim.kubism.ku.dk>
References: <20050430094719.918BBA1CA@slim.kubism.ku.dk>
Message-ID: <Pine.LNX.4.61.0504301111440.21745@gannet.stats>

I've now tested our one remaining RH9 system (built from the sources), and 
that behaves exactly as FC3.

Something is wrong with Jskud@jskud.com's system or its build, not RH9 nor 
R generically.

I've put a workaround in R-patched, but ultimately cycles in inheritance 
are always possible and the expressions/ppsize limits are there to catch 
those.

On Sat, 30 Apr 2005 ripley@stats.ox.ac.uk wrote:

> 1) Why did you submit this *twice*, as PR#7826 and PR#7827?  Please don't
> be so careless of the volunteers' time.
>
> 2) > print.POSIXct
> function (x, ...)
> {
>     print(format(x, usetz = TRUE, ...), ...)
>     invisible(x)
> }
>
> is definitely *not* implicated.  (Use of ... in two places is correct.)
>
> 3) On FC3:
>
>> unusual_and_faults
> Error: protect(): protection stack overflow
>> format(unusual_and_faults)
> Error: protect(): protection stack overflow
>> as.POSIXlt(unusual_and_faults)
> Error: protect(): protection stack overflow
>
> which is what should happen.  It looks like RH9 has an inadequate stack
> size for the new recursion limits of R 2.1.0.  This is nothing whatsoever
> to do with print.POSIXct.
>
> The problem is in fact in c.POSIXct which is not checking its arguments.
>
>
> On Sat, 30 Apr 2005 Jskud@jskud.com wrote:
>
>> In attempting to build R using
>>
>> 	rpmbuild --rebuild R-2.1.0-0.fdr.2.fc3.src.rpm
>>
>> on a fairly up-to-date RedHat 9 system (that is, with patches installed
>> through May 1 2004), it failed at the make check-all step.
>>
>> The problem was reproducible by going into the tests directory and
>>
>> 	make test-Segfault
>>
>> The last lines of the saved file no-segfault.Rout.fail are
>>
>>>> ##  c.POSIXct  :
>>>> f <- get("c.POSIXct", pos = 'package:base')
>>>> f()
>>> character(0)
>>>> f(NULL)
>>> character(0)
>>>> f(,NULL)
>>> Error in lapply(list(...), unclass) : argument is missing, with no default
>>>> f(NULL,NULL)
>>> character(0)
>>>> f(list())
>>> character(0)
>>>> f(l0)
>>> character(0)
>>
>> I was able to reproduce the problem (a segfault) as the following simple
>> transcript demonstrates:
>>
>>    LC_ALL=C SRCDIR=. R_DEFAULT_PACKAGES= ../bin/R --vanilla
>>
>>    R : Copyright 2005, The R Foundation for Statistical Computing
>>    Version 2.1.0  (2005-04-18), ISBN 3-900051-07-0
>>
>>    R is free software and comes with ABSOLUTELY NO WARRANTY.
>>    You are welcome to redistribute it under certain conditions.
>>    Type 'license()' or 'licence()' for distribution details.
>>
>>    R is a collaborative project with many contributors.
>>    Type 'contributors()' for more information and
>>    'citation()' on how to cite R or R packages in publications.
>>
>>    Type 'demo()' for some demos, 'help()' for on-line help, or
>>    'help.start()' for a HTML browser interface to help.
>>    Type 'q()' to quit R.
>>
>>   > unusual_but_ok <- c.POSIXlt(character(0))
>>   > unusual_but_ok
>>    character(0)
>>   > unusual_and_faults <- c.POSIXct(character(0))
>>   > unusual_and_faults
>>    Segmentation fault
>>
>> Running this test program under gdb, we find that we're running off the
>> end of the stack, with 4222 stack frames showing -- apparently in an
>> infinite recursion -- "as.character" shows up every 69 function calls:
>>
>> #64 0x080ea1ef in Rf_usemethod (generic=0x81c8b12 "as.character", obj=0x0, call=0x85a04f4,
>>    args=0x8af8b00, rho=0x8af8b70, callrho=0x8af8b70, defrho=0x829d4c0, ans=0xbff042b8)
>>    at objects.c:328
>>
>> #133 0x080ea1ef in Rf_usemethod (generic=0x81c8b12 "as.character", obj=0x0, call=0x85a04f4,
>>    args=0x8af35f0, rho=0x8af3660, callrho=0x8af3660, defrho=0x829d4c0, ans=0xbff08538)
>>    at objects.c:328
>>
>> #202 0x080ea1ef in Rf_usemethod (generic=0x81c8b12 "as.character", obj=0x0, call=0x85a04f4,
>>    args=0x8aeca08, rho=0x8aeca78, callrho=0x8aeca78, defrho=0x829d4c0, ans=0xbff0c7b8)
>>    at objects.c:328
>>
>> #271 0x080ea1ef in Rf_usemethod (generic=0x81c8b12 "as.character", obj=0x0, call=0x85a04f4,
>>    args=0x8ae7514, rho=0x8ae7584, callrho=0x8ae7584, defrho=0x829d4c0, ans=0xbff10a38)
>>    at objects.c:328
>>
>> #340 0x080ea1ef in Rf_usemethod (generic=0x81c8b12 "as.character", obj=0x0, call=0x85a04f4,
>>    args=0x8ade4c0, rho=0x8ade530, callrho=0x8ade530, defrho=0x829d4c0, ans=0xbff14cb8)
>>    at objects.c:328
>>
>> So it would seem that *printing* the unusual POSIXct value is suspect.
>> Looking at a R-1.8.1 install, we find these definitions in base/R/base:
>>
>>    print.POSIXct <- function(x, ...)
>>    {
>> 	print(format(x, usetz=TRUE), ...)
>> 	invisible(x)
>>    }
>>
>>    print.POSIXlt <- function(x, ...)
>>    {
>> 	print(format(x, usetz=TRUE), ...)
>> 	invisible(x)
>>    }
>>
>> However, looking at the 2.1.0 src file
>> R-2.1.0/src/library/base/R/datetime.R, we find
>>
>>    print.POSIXct <- function(x, ...)
>>    {
>> 	print(format(x, usetz=TRUE, ...), ...)
>> 	invisible(x)
>>    }
>>
>>    print.POSIXlt <- function(x, ...)
>>    {
>> 	print(format(x, usetz=TRUE), ...)
>> 	invisible(x)
>>    }
>>
>> Note the suspicious definition of print.POSIXct using *two* sets of
>> ellipses, and that the print.POSIXct and print.POSIXlt definitions no
>> longer match.
>>
>> /Jskud
>>
>> --please do not edit the information below--
>>
>> Version:
>> platform = i686-pc-linux-gnu
>> arch = i686
>> os = linux-gnu
>> system = i686, linux-gnu
>> status =
>> major = 2
>> minor = 1.0
>> year = 2005
>> month = 04
>> day = 18
>> language = R
>>
>> []
>>
>> ______________________________________________
>> R-devel@stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>>
>>
>
> -- 
> Brian D. Ripley,                  ripley@stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272866 (PA)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>
> ______________________________________________
> R-devel@stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272866 (PA)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


(PR#7826) [Rd] segfault during build of 2.1.0 on RH9; print.POSIXct
Prof Brian Ripley