diff --git a/src/utils.c b/src/utils.c index e8b0810fd..72458923f 100644 --- a/src/utils.c +++ b/src/utils.c @@ -389,7 +389,9 @@ SEXP df_map(SEXP df, SEXP (*fn)(SEXP)) { \ r_ssize copy_size = (size > x_size) ? x_size : size; \ \ - memcpy(p_out, p_x, copy_size * sizeof(CTYPE)); \ + if (copy_size > 0) { \ + memcpy(p_out, p_x, copy_size * sizeof(CTYPE)); \ + } \ \ UNPROTECT(1); \ return out; \ diff --git a/tests/testthat/test-set.R b/tests/testthat/test-set.R index 7eb47287e..ce96b1cac 100644 --- a/tests/testthat/test-set.R +++ b/tests/testthat/test-set.R @@ -244,6 +244,11 @@ test_that("works with rcrds", { expect_identical(vec_set_union(y, x), vec_c(vec_slice(y, c(1, 2, 3, 4)), vec_slice(x, 1))) }) +test_that("works on empty inputs", { + expect_identical(vec_set_union(integer(), 12L), 12L) + expect_identical(vec_set_union(12L, integer()), 12L) +}) + # vec_set_symmetric_difference -------------------------------------------- test_that("retains names of `x` and `y` elements", {