[Bioc-devel] big in IRanges 1.9.1

luke at stat.uiowa.edu luke at stat.uiowa.edu
Sat Oct 30 00:08:47 CEST 2010

I reduced an intermittent bug in IRanges to the following:

nr <- 47
idx <- 48:49
for (i in 1:10000)
     if (IRanges:::anyMissingOrOutside(idx, -nr, NULL)) browser()

This should never enter the browser but does reliable for me with 10000 reps.
(R-devel and IRanges 1.9.1)

The problem is code in IRanges:::.bracket.Index that does

     function (idx, lx, nms = NULL, dup.nms = FALSE, asRanges = FALSE,
               allowAppend = FALSE) {
         if (anyMissingOrOutside(idx, -lx, if (!allowAppend) lx))

If allowAppend it TRUE then the 'upper' argument to
anyMissingOroutside is NULL, and in anyMissingOrOutside this is
converted by as.integer to integer(0), but the C code that is called
looks at the first element without checking the length. Perhaps the
simplest fix is for anyMissingOrOutside to test for NULL and use the
default value in that case; it would probably be good for the C code
to do a sanity check on types and lengths as well.



Luke Tierney
Statistics and Actuarial Science
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:      luke at stat.uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu

More information about the Bioc-devel mailing list