Hello, I received a valgrind warning about my package, hutilscpp, from CRAN (thank you). I believe I've tracked down and fixed the problem, but I wasn't able to reproduce the error on rhub (including with --leak-check=full etc) so I'd like to know if I'm missing something.
The valgrind warning is "Invalid write of size 4" and refers to this line https://github.com/HughParsonage/hutilscpp/blob/508f134b3f388653985eca372ed5f4f8b8eb3471/src/Cwhich_even.c#L43 the context for this line is: const double * xp = REAL(xx); for (R_xlen_t i = 0, j = 0; i < N; ++i) { int is_even = R_finite(xp[i]) && (fmod(xp[i], 2) == 0); ansp[j] = (int)(i + 1); // # <-------- line 43 j += is_even; } where ansp is a pointer to an integer vector whose length is the number of "even" doubles in xx. I can see that the problem arises when the last even number occurs before the end of the vector xx, at which point j == length(ansp), yet the loop continues. I've amended the i < N in the for loop to (i < N && j < n_even) which I believe is sufficient, but obviously I thought it was ok before. I'd rather not resubmit only to discover that I've overlooked something else. As a supplementary question, does the valgrind check depend on the runtime values in the test suite or does it perform fuzz testing? In other words, do I need to add tests to reproduce? Best, Hugh. ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel