New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Segfault in window_idx #263

Closed
TomAndrews opened this Issue Aug 15, 2018 · 2 comments

Comments

Projects
None yet
2 participants
@TomAndrews
Contributor

TomAndrews commented Aug 15, 2018

Description

I've been seeing intermitted segfaults in my R code recently. One gave the following output:

0:01:13.457  *** caught segfault ***
00:01:13.457 address 0x180, cause 'memory not mapped'
00:01:13.458 
00:01:13.458 Traceback:
00:01:13.458  1: window_idx(x, index. = i)
00:01:13.458  2: `[.xts`(isTrading, time(data), colnames(data))

Expected behavior

No segfault!

Minimal, reproducible example

I can't reproduce the segfault but you can see the illegal read in valgrind (starting R with R -d valgrind)

library(xts)
ts1 <- .xts(1:10000, 1:10000)
ts2 <- .xts(1:20000, 1:20000)
gctorture(TRUE)
invisible(ts2[index(ts1)])

==47968== Invalid read of size 1
==47968==    at 0x4ED66AE: Rf_getAttrib (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4EEA2E7: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F78A12: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Address 0xabaf320 is 0 bytes inside a block of size 80,048 free'd
==47968==    at 0x4C2CDDB: free (vg_replace_malloc.c:530)
==47968==    by 0x4FABC31: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FADDDC: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4EEA29F: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Block was alloc'd at
==47968==    at 0x4C2BBAF: malloc (vg_replace_malloc.c:299)
==47968==    by 0x4FAE36C: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x14F4DF64: fill_window_dups_rev (binsearch.c:168)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==
==47968== Invalid read of size 8
==47968==    at 0x4ED66C6: Rf_getAttrib (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4EEA2E7: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F78A12: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Address 0xabaf328 is 8 bytes inside a block of size 80,048 free'd
==47968==    at 0x4C2CDDB: free (vg_replace_malloc.c:530)
==47968==    by 0x4FABC31: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FADDDC: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4EEA29F: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Block was alloc'd at
==47968==    at 0x4C2BBAF: malloc (vg_replace_malloc.c:299)
==47968==    by 0x4FAE36C: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x14F4DF64: fill_window_dups_rev (binsearch.c:168)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==
==47968== Invalid read of size 1
==47968==    at 0x4EEA33D: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F78A12: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x502CEC9: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Address 0xabaf320 is 0 bytes inside a block of size 80,048 free'd
==47968==    at 0x4C2CDDB: free (vg_replace_malloc.c:530)
==47968==    by 0x4FABC31: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FADDDC: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4EEA29F: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Block was alloc'd at
==47968==    at 0x4C2BBAF: malloc (vg_replace_malloc.c:299)
==47968==    by 0x4FAE36C: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x14F4DF64: fill_window_dups_rev (binsearch.c:168)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==
==47968== Invalid read of size 1
==47968==    at 0x4EEA7A0: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F78A12: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x502CEC9: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Address 0xabaf320 is 0 bytes inside a block of size 80,048 free'd
==47968==    at 0x4C2CDDB: free (vg_replace_malloc.c:530)
==47968==    by 0x4FABC31: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FADDDC: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4EEA29F: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Block was alloc'd at
==47968==    at 0x4C2BBAF: malloc (vg_replace_malloc.c:299)
==47968==    by 0x4FAE36C: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x14F4DF64: fill_window_dups_rev (binsearch.c:168)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==
==47968== Invalid read of size 4
==47968==    at 0x4EEA7AC: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F78A12: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x502CEC9: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Address 0xabaf350 is 48 bytes inside a block of size 80,048 free'd
==47968==    at 0x4C2CDDB: free (vg_replace_malloc.c:530)
==47968==    by 0x4FABC31: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FADDDC: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4EEA29F: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Block was alloc'd at
==47968==    at 0x4C2BBAF: malloc (vg_replace_malloc.c:299)
==47968==    by 0x4FAE36C: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x14F4DF64: fill_window_dups_rev (binsearch.c:168)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==
==47968== Invalid read of size 1
==47968==    at 0x4EEA858: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F78A12: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x502CEC9: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Address 0xabaf320 is 0 bytes inside a block of size 80,048 free'd
==47968==    at 0x4C2CDDB: free (vg_replace_malloc.c:530)
==47968==    by 0x4FABC31: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FADDDC: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4EEA29F: Rf_xlengthgets (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==  Block was alloc'd at
==47968==    at 0x4C2BBAF: malloc (vg_replace_malloc.c:299)
==47968==    by 0x4FAE36C: Rf_allocVector3 (in /usr/lib/R/lib/libR.so)
==47968==    by 0x14F4DF64: fill_window_dups_rev (binsearch.c:168)
==47968==    by 0x4F2D29A: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F681E6: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F69643: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F7266F: Rf_eval (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4F73FD8: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2629: ??? (in /usr/lib/R/lib/libR.so)
==47968==    by 0x4FB2A8E: ??? (in /usr/lib/R/lib/libR.so)
==47968==

I think you might need to PROTECT the return value in fill_window_dups_rev. I'll make a pull request shortly which I think fixes the illegal read.

Session Info

Warning in sessionInfo() : restarting interrupted promise evaluation
R version 3.5.1 (2018-07-02)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 9 (stretch)

Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.7.0
LAPACK: /usr/lib/lapack/liblapack.so.3.7.0

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8
 [5] LC_MONETARY=en_GB.UTF-8    LC_MESSAGES=en_GB.UTF-8
 [7] LC_PAPER=en_GB.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

other attached packages:
[1] xts_0.11-0 zoo_1.8-3

loaded via a namespace (and not attached):
[1] compiler_3.5.1  grid_3.5.1      lattice_0.20-35
@joshuaulrich

This comment has been minimized.

Show comment
Hide comment
@joshuaulrich

joshuaulrich Aug 15, 2018

Owner

I honestly laughed at:

Expected behavior

No segfault!

Thanks for finding and patching this.

Owner

joshuaulrich commented Aug 15, 2018

I honestly laughed at:

Expected behavior

No segfault!

Thanks for finding and patching this.

@joshuaulrich

This comment has been minimized.

Show comment
Hide comment
@joshuaulrich

joshuaulrich Aug 15, 2018

Owner

I could pretty regularly get a segfault via:

require(xts)
ts1 <- .xts(1:100, 1:100)
ts2 <- .xts(1:200, 1:200)
i <- index(ts1)
tt <- ts2[i]

After applying:

diff --git a/R/xts.methods.R b/R/xts.methods.R
index c94ac6b..5299061 100644
--- a/R/xts.methods.R
+++ b/R/xts.methods.R
@@ -282,8 +282,9 @@ window_idx <- function(x, index. = NULL, start = NULL, end = NULL)
     # Translate from user .index to xts index
     # We get back upper bound of index as per findInterval
     tmp <- base_idx[firstlast]
-
+gctorture(TRUE)
     res <- .Call("fill_window_dups_rev", tmp, .index(x), PACKAGE = "xts")
+gctorture(FALSE)
     firstlast <- rev(res)
   }
Owner

joshuaulrich commented Aug 15, 2018

I could pretty regularly get a segfault via:

require(xts)
ts1 <- .xts(1:100, 1:100)
ts2 <- .xts(1:200, 1:200)
i <- index(ts1)
tt <- ts2[i]

After applying:

diff --git a/R/xts.methods.R b/R/xts.methods.R
index c94ac6b..5299061 100644
--- a/R/xts.methods.R
+++ b/R/xts.methods.R
@@ -282,8 +282,9 @@ window_idx <- function(x, index. = NULL, start = NULL, end = NULL)
     # Translate from user .index to xts index
     # We get back upper bound of index as per findInterval
     tmp <- base_idx[firstlast]
-
+gctorture(TRUE)
     res <- .Call("fill_window_dups_rev", tmp, .index(x), PACKAGE = "xts")
+gctorture(FALSE)
     firstlast <- rev(res)
   }

@joshuaulrich joshuaulrich added this to the Release 0.11-1 milestone Aug 15, 2018

@joshuaulrich joshuaulrich added the bug label Aug 15, 2018

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment