[Rd] A potential POSIXlt->Date bug introduced in r-devel

Prof Brian Ripley r|p|ey @end|ng |rom @t@t@@ox@@c@uk
Wed Oct 12 12:46:19 CEST 2022


Confirmed on Fedora 36 which has a 32-bit time_t for an i686 compile.  I 
was a bit surprised that has not been changed, but gather Linux distros 
are preferring to drop ix86 than fix it.

There is a simple workaround, to configure R with 
--with-internal-tzcode, which always uses a 64-bit time_t.  Given that 
2038 is not that far away, avoiding 32-bit time_t is generally a very 
good idea (not just for people working with dates in 5881580!).

That test should not really be run on platforms with 32-bit time_t, but 
that is not currently known at R level.

On 06/10/2022 13:38, Prof Brian Ripley wrote:
> On 06/10/2022 09:41, Berwin A Turlach wrote:
>> G'day all,
>>
>> On Thu, 6 Oct 2022 10:15:29 +0200
>> Martin Maechler <maechler using stat.math.ethz.ch> wrote:
>>
>>>>>>>> Davis Vaughan
>>>>>>>>      on Wed, 5 Oct 2022 17:04:11 -0400 writes:
>>
>>>      > # Weird, where is the `NA`?
>>>      > as.Date(x)
>>>      > #> [1] "2013-01-31" "1970-01-01" "2013-03-31"
>>>      > ```
>>>
>>> I agree that the above is wrong, i.e., a bug in current  R-devel.
>>
>> I have no intention of hijacking this thread, but I wonder whether this
>> is a good opportunity to mention that the 32 bit build of R-devel falls
>> over on my machine since 25 September.  It fails one of the regression
>> tests in reg-tests-1d.R.  The final lines of reg-tests-1d.Rout.fail
>> are:
>>
>>> tools::Rd2txt(rd, out <- textConnection(NULL, "w"), fragment = TRUE)
>>> stopifnot(any(as.character(rd) != "\n"),
>> +           identical(textConnectionValue(out)[2L], "LaTeX"));
>> close(out)
>>> ## empty output in R <= 4.2.x
> 
> Yes, known for a few days on the R-core list. I am in the middle of an 
> OS upgrade on that machine and won't have time to do more than report 
> until that (and all the re-building and re-checking) is complete.
> 
>>> ## as.POSIXlt(<very large Date>)  gave integer overflow
>>> stopifnot(as.POSIXlt(.Date(2^31 + 10))$year == 5879680L)
>> Error: as.POSIXlt(.Date(2^31 + 10))$year == 5879680L is not TRUE
>> Execution halted
>>
>>
>> I should have reported this earlier, but somehow did not find the time
>> to do so.  So I thought I mention it here. :)
>>
>> Cheers,
>>
>>     Berwin
>>
>> ______________________________________________
>> R-devel using r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
> 
> 


-- 
Brian D. Ripley,                  ripley using stats.ox.ac.uk
Emeritus Professor of Applied Statistics, University of Oxford



More information about the R-devel mailing list