Skip to content

Infinite recursion in S3 methods crashes R on windows (related to PR#8203?)

4 messages · Rich FitzJohn, Henrik Bengtsson, Brian Ripley +1 more

#
Hi,

Infinite recursion in S3 methods seem to crash R on Windows 2000 (R
terminating with the ("Rgui.exe has generated errors...") message,
rather than throwing an error.  This happens with both Rgui and Rterm.

The following toy example triggers this:
myf <- function(x, ...)
  UseMethod("myf")

myf.default <- function(x, ...)
  myf(x)

myf(1)
...R crashes...

Which I would expect to terminate with the usual "evaluation nested
too deeply: infinite recursion" or protect stack overflow message.

This may be related to the reported bug 8203 - apologies if this has
been fixed.  I couldn't find specific mention of this in the NEWS
file.

This does not happen on R 2.1.0 on Windows 2000 (same machine), or on
R 2.2.0 on Linux.  R/Machine version below.

Cheers,
Rich

Version:
platform = i386-pc-mingw32
arch = i386
os = mingw32
system = i386, mingw32
status =
major = 2
minor = 2.0
year = 2005
month = 10
day = 06
svn rev = 35749
language = R

Windows 2000 Professional (build 2195) Service Pack 4.0

Locale:
LC_COLLATE=English_New Zealand.1252;LC_CTYPE=English_New
Zealand.1252;LC_MONETARY=English_New
Zealand.1252;LC_NUMERIC=C;LC_TIME=English_New Zealand.1252

Search Path:
.GlobalEnv, package:methods, package:stats, package:graphics,
package:grDevices, package:utils, package:datasets, Autoloads,
package:base


--
Rich FitzJohn
rich.fitzjohn <at> gmail.com   |    http://homepages.paradise.net.nz/richa183
                      You are in a maze of twisty little functions, all alike
#
Hi, trying the same on WinXP I get

:R 2.1.1 Patched (2005-09-19)
 > myf(1)
Error: protect(): protection stack overflow

R 2.2.0 Patched (2005-11-21 r36410):
 > myf(1)
Error: evaluation nested too deeply: infinite recursion / 
options(expressions=)?
 > options(expressions=50000)
 > myf(1)
Error: protect(): protection stack overflow

So either it has been fixed or there is a bug there that only shows up 
under certain conditions.

Cheers

Henrik
Rich FitzJohn wrote:
#
On Thu, 24 Nov 2005, Rich FitzJohn wrote:

            
PR#8203 is attributed to C-stack overflow, and there is a prominent 
message (quoted below) in NEWS.
What is happening is that the Windows C stack is being overflowed before 
the evaluation limit is reached, and what happens thereafter is random.
So it would probably also crash in 2.1.0 eventually.

This has already been fixed, and the R-patched NEWS file says

USER-VISIBLE CHANGES

     o   options("expressions") has been reduced to 1000: the limit
         of 5000 introduced in 2.1.0 was liable to give crashes from C
         stack overflow.

and the Windows CHANGES file says

The maximum C stack size for RGui.exe and Rterm.exe has been increased
to 10Mb (from 2Mb); this is comparable with the default on Linux systems
and may allow some larger programs to run without crashes.
#
Rich FitzJohn <rich.fitzjohn at gmail.com> writes:
This is presumably an issue of C stack size. We increased
options("expressions") in 2.2.0 from 500 to 5000, thinking that
"machines are bigger than that these days", but apparently not.

So for 2.2.0 patched we have

    o   options("expressions") has been reduced to 1000: the limit
        of 5000 introduced in 2.1.0 was liable to give crashes from C
        stack overflow.

and in R-devel

    o   options(expressions) reverts to the default of 5000 now
        stack checking is in place.