qsbase / qs

Quick serialization of R objects
400 stars 19 forks source link

qs segfaults when using a data.frame with external pointer in attributes in renv-controlled session #97

Closed DavZim closed 4 months ago

DavZim commented 4 months ago

When I write a dataset that contains externalptrs as an attribute (default for readr) in a project using renv, I get a segmentation fault.

#> - Project '~/repro' loaded. [renv 1.0.7]

library(qs)
library(readr)

df <- data.frame(x = 1:10)
write_csv(df, "testdata.csv")
qsave(df, "testdata.qs") # save works here

df2 <- read_csv("testdata.csv")
str(df2)
#> spc_tbl_ [10 × 1] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
#> $ x: num [1:10] 1 2 3 4 5 6 7 8 9 10
#> - attr(*, "spec")=
#>  .. cols(
#>  ..   x = col_double()
#>  .. )
#> - attr(*, "problems")=<externalptr> 

qsave(df2, "testdata2.qs") # breaks the code
#>  *** caught segfault ***
#> address 0x19, cause 'memory not mapped'
#> 
#> Traceback:
#>  1: qsave(df2, "testdata2.qs")

The segfault does not show when I use df2 <- as.data.frame(df2), df2 <- tibble::as_tibble(df2), or attr(df2, "problems") <- NULL, or when I run this outside of renv, or when I use df2 <- read.csv("testdata.csv") instead of readr::read_csv().

I am not sure if this belongs here or to renv.

Let me know if you need any further information.

Session

sessioninfo::session_info()
#> ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────
#>  setting  value
#>  version  R version 4.3.1 (2023-06-16)
#>  os       Ubuntu 22.04.4 LTS
#>  system   x86_64, linux-gnu
#>  ui       RStudio
#>  language (EN)
#>  collate  en_US.UTF-8
#>  ctype    en_US.UTF-8
#>  tz       Etc/UTC
#>  date     2024-05-16
#>  rstudio  2023.12.0+369.pro3 Ocean Storm (server)
#>  pandoc   2.9.2.1 @ /usr/bin/pandoc
#> 
#> ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────
#>  package       * version date (UTC) lib source
#>  cli             3.6.1   2023-03-23 [2] RSPM (R 4.3.0)
#>  digest          0.6.35  2024-03-11 [1] RSPM (R 4.3.0)
#>  ellipsis        0.3.2   2021-04-29 [2] RSPM (R 4.3.0)
#>  fansi           1.0.4   2023-01-22 [2] RSPM (R 4.3.0)
#>  fastmap         1.1.1   2023-02-24 [2] RSPM (R 4.3.0)
#>  glue            1.6.2   2022-02-24 [2] RSPM (R 4.3.0)
#>  hms             1.1.3   2023-03-21 [2] RSPM (R 4.3.0)
#>  htmltools       0.5.6   2023-08-10 [2] RSPM (R 4.3.0)
#>  httpuv          1.6.11  2023-05-11 [2] RSPM (R 4.3.0)
#>  later           1.3.1   2023-05-02 [2] RSPM (R 4.3.0)
#>  lifecycle       1.0.3   2022-10-07 [2] RSPM (R 4.3.0)
#>  magrittr        2.0.3   2022-03-30 [2] RSPM (R 4.3.0)
#>  mime            0.12    2021-09-28 [2] RSPM (R 4.3.0)
#>  pillar          1.9.0   2023-03-22 [2] RSPM (R 4.3.0)
#>  pkgconfig       2.0.3   2019-09-22 [2] RSPM (R 4.3.0)
#>  promises        1.2.1   2023-08-10 [2] RSPM (R 4.3.0)
#>  qs            * 0.26.1  2024-03-09 [1] RSPM (R 4.3.0)
#>  R6              2.5.1   2021-08-19 [2] RSPM (R 4.3.0)
#>  RApiSerialize   0.1.3   2024-05-14 [1] RSPM (R 4.3.0)
#>  Rcpp            1.0.12  2024-01-09 [1] RSPM (R 4.3.0)
#>  RcppParallel    5.1.7   2023-02-27 [2] RSPM (R 4.3.0)
#>  readr         * 2.1.5   2024-01-10 [1] RSPM (R 4.3.0)
#>  rlang           1.1.1   2023-04-28 [2] RSPM (R 4.3.0)
#>  rsconnect       1.2.1   2024-01-31 [1] RSPM (R 4.3.0)
#>  rstudioapi      0.15.0  2023-07-07 [2] RSPM (R 4.3.0)
#>  sessioninfo     1.2.2   2021-12-06 [1] RSPM (R 4.3.0)
#>  shiny           1.7.5   2023-08-12 [1] RSPM (R 4.3.0)
#>  stringfish      0.16.0  2023-11-28 [1] RSPM (R 4.3.0)
#>  tibble          3.2.1   2023-03-20 [2] RSPM (R 4.3.0)
#>  tzdb            0.4.0   2023-05-12 [2] RSPM (R 4.3.0)
#>  utf8            1.2.3   2023-01-31 [2] RSPM (R 4.3.0)
#>  vctrs           0.6.3   2023-06-14 [2] RSPM (R 4.3.0)
#>  xtable          1.8-4   2019-04-21 [2] RSPM (R 4.3.0)
DavZim commented 4 months ago

I just installed the newest version of qs (0.26.3) and it does not crash anymore. Will close this now!