Skip to content

Commit 580c8de

Browse files
authored
Error if get_namespace() fails (#396)
Rather than hanging indefinitely when a function is called
1 parent 61c78b4 commit 580c8de

File tree

3 files changed

+8
-1
lines changed

3 files changed

+8
-1
lines changed

NEWS.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# cpp11 (development version)
22

3+
* `cpp11::package` now errors if given a package name that hasn't been loaded
4+
yet. Previously it would cause R to hang indefinitely (#317).
5+
36
* `cpp11::function` now protects its underlying function, for maximum safety
47
(#294).
58

cpp11test/src/test-function.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,8 @@ context("function-C++") {
3636

3737
close(con);
3838
}
39+
40+
test_that("unknown packages cause an error (#317)") {
41+
expect_error_as(cpp11::package("definitely_not_a_package"), cpp11::unwind_exception);
42+
}
3943
}

inst/include/cpp11/function.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ class package {
6868
return R_BaseEnv;
6969
}
7070
sexp name_sexp = safe[Rf_install](name);
71-
return safe[Rf_findVarInFrame](R_NamespaceRegistry, name_sexp);
71+
return safe[detail::r_env_get](R_NamespaceRegistry, name_sexp);
7272
}
7373

7474
// Either base env or in namespace registry, so no protection needed

0 commit comments

Comments
 (0)