Add ALTREP guard to prevent unsafe R calls from ALTREP methods #1797
+59
−26
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
rapi_error_with_context()jumps into R, which is unsafe from ALTREP method callbacks and can cause stack overflows.Changes
AltrepGuardclass (src/include/rapi.hpp): Thread-local RAII guard with depth counter to track ALTREP method execution contextrapi_error_with_context()modification (src/utils.cpp): When guard is active, throwsstd::runtime_errorinstead of calling into R. TheBEGIN_CPP11/END_CPP11macros catch this and convert to R error safely.src/reltoaltrep.cpp): AddedAltrepGuard guard;to all 11 ALTREP method callbacksExample
Error messages change from multi-line format to
Context: Messagebut retain same information.Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
cloud.r-project.org/opt/R/4.5.2/lib/R/bin/exec/R /opt/R/4.5.2/lib/R/bin/exec/R -q -e options(repos~+~=~+~c(CRAN~+~=~+~'REDACTED'));~+~install.packages(c('DBI',~+~'testthat',~+~'cpp11',~+~'rlang'),~+~type='source')(dns block)cran.r-project.org/opt/R/4.5.2/lib/R/bin/exec/R /opt/R/4.5.2/lib/R/bin/exec/R -q -e install.packages(c('DBI',~+~'testthat',~+~'cpp11',~+~'rlang'),~+~repos='REDACTED')(dns block)/usr/bin/curl curl -sI REDACTED(dns block)p3m.dev/opt/R/4.5.2/lib/R/bin/exec/R /opt/R/4.5.2/lib/R/bin/exec/R -q -e options(repos~+~=~+~c(CRAN~+~=~+~'REDACTED'));~+~install.packages(c('DBI',~+~'testthat',~+~'cpp11',~+~'rlang'))(dns block)If you need me to access, download, or install something from one of these locations, you can either:
Original prompt
rapi_error_with_context()is unsafe from ALTREP methods #1796💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.