(PR#7826) [Rd] segfault during build of 2.1.0 on RH9;
print.POSIXct
ripley at stats.ox.ac.uk
ripley at stats.ox.ac.uk
Sat Apr 30 11:47:19 CEST 2005
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 at 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 at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>
>
--
Brian D. Ripley, ripley at 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
More information about the R-devel
mailing list