PRL-PRG / UFOs

User Fault Objects: making vectors lazy and forgetful.
12 stars 3 forks source link

Segfault: No anode #27

Closed kondziu closed 3 years ago

kondziu commented 3 years ago

Segfaults in REAL_ELT(hash_to_index_table, index)

index: 127063 sexp (hash_to_index_table): 0x7ffff3420fd0 hash_to_index_table length: 262144 hash_to_index_table type: REALSXP (actually R_len_t)

inside function irash_add (rash.c:377)

Message:

no known object for fault: No anode
error handling an event, shutting down: No anode

 CRASHING 

: No anode
 *** caught segfault ***
address 0x7ffff350cdd8, cause 'memory not mapped'

Traceback:
 1: ufovectors::subscript(ufo, subscript)

Repro code (not minimal and messy):

  library(ufovectors)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- NULL
  reference <- integer(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000
  subscript <- TRUE

  reference <- 1:100000
  result <- ufovectors::subscript(ufo, subscript)
  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- FALSE
  reference <- integer(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(FALSE, TRUE)

  reference <- (1:100000)[subscript]
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(TRUE, TRUE, FALSE)

  reference <- (1:100000)[subscript]
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(TRUE, FALSE, NA)

  reference <- (1:100000)[subscript]
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- 0

  reference <- integer(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(0, 0)

  reference <- integer(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(0, 1, 0, 100000)

  reference <- as.integer(c(1, 100000))
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.integer(0)

  reference <- integer(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.integer(42)

  reference <- as.integer(42)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.integer(c(4, 10, 7, 100))

  reference <- as.integer(c(4, 10, 7, 100))
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.integer(c(4, 10, NA, 7, NA, 100, NA))

  reference <- as.integer(c(4, 10, NA, 7, NA, 100, NA))
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.integer(c(1:1000, 2000:5000, 10:1000, 6000:10000))

  reference <- as.integer(c(1:1000, 2000:5000, 10:1000, 6000:10000))
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.integer(-10)

  reference <- (1:100000)[-10]
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.integer(c(-10, -100, -100, -1000))

  reference <- (1:100000)[c(-10, -100, -100, -1000)]
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.integer(-c(1:1000, 2000:5000, 10:1000, 6000:10000))

  reference <-
    (1:100000)[as.integer(-c(1:1000, 2000:5000, 10:1000, 6000:10000))]
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.integer(-as.integer(1:100000))

  reference <- integer(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- 0

  reference <- numeric(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(0, 0)

  reference <- numeric(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(0, 1, 0, 100000)

  reference <- c(1, 100000)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.numeric(0)

  reference <- numeric(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.numeric(42)

  reference <- as.numeric(42)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(4, 10, 7, 100)

  reference <- c(4, 10, 7, 100)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(4, 10, NA, 7, NA, 100, 100, NA)

  reference <- c(4, 10, NA, 7, NA, 100, 100, NA)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(1:1000, 2000:5000, 10:1000, 6000:10000)

  reference <- c(1:1000, 2000:5000, 10:1000, 6000:10000)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- as.numeric(-10)

  reference <- (1:100000)[-10]
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c(-10, -100, -100, -1000)

  reference <- (1:100000)[c(-10, -100, -100, -1000)]
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- -c(1:1000, 2000:5000, 10:1000, 6000:10000)

  reference <- (1:100000)[-c(1:1000, 2000:5000, 10:1000, 6000:10000)]
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- -as.numeric(1:100000)

  reference <- numeric(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- "butts"

  reference <- as.integer(NA)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000

  subscript <- c("a", "b", "c")

  reference <- as.integer(c(NA, NA, NA))
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000
  ufo_names <- paste0("N", 1:100000)
  ufo <- setNames(ufo, ufo_names)

  subscript <- "N42"

  reference <- as.integer(42)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000
  ufo_names <- paste0("N", 1:100000)
  ufo <- setNames(ufo, ufo_names)

  subscript <- character(0)

  reference <- integer(0)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000
  ufo_names <- paste0("N", 1:100000)
  ufo <- setNames(ufo, ufo_names)

  subscript <- c("N4", "N10", "N7", "N100", "N100")

  reference <- c(4, 10, 7, 100, 100)
  result <- ufovectors::subscript(ufo, subscript)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000
  ufo_names <- paste0("N", 1:100000)
  ufo <- setNames(ufo, ufo_names)

  subscript <- c("N4", NA, "N10", NA, "N7", "N100", "N100", NA) # exposes the segfault! i ran it in sequence with all the previous ones though, gc-related?

  reference <- c(4, NA, 10, NA, 7, 100, 100, NA)
  result <- ufovectors::subscript(ufo, subscript)

  print(result)

  ufo <- ufo_integer(100000)
  ufo[1:100000] <- 1:100000
  ufo_names <- paste0("N", 1:100000)
  ufo <- setNames(ufo, ufo_names)

  subscript <- paste0("N", c(1:1000, 2000:5000, 10:1000, 6000:10000))

  reference <- c(1:1000, 2000:5000, 10:1000, 6000:10000)
  result <- ufovectors::subscript(ufo, subscript)