fix(permissions): handle None response from ACP request_permission
This commit is contained in:
@@ -63,6 +63,9 @@ def make_approval_callback(
|
|||||||
logger.warning("Permission request timed out or failed: %s", exc)
|
logger.warning("Permission request timed out or failed: %s", exc)
|
||||||
return "deny"
|
return "deny"
|
||||||
|
|
||||||
|
if response is None:
|
||||||
|
return "deny"
|
||||||
|
|
||||||
outcome = response.outcome
|
outcome = response.outcome
|
||||||
if isinstance(outcome, AllowedOutcome):
|
if isinstance(outcome, AllowedOutcome):
|
||||||
option_id = outcome.option_id
|
option_id = outcome.option_id
|
||||||
|
|||||||
@@ -73,3 +73,17 @@ class TestApprovalMapping:
|
|||||||
result = cb("rm -rf /", "dangerous")
|
result = cb("rm -rf /", "dangerous")
|
||||||
|
|
||||||
assert result == "deny"
|
assert result == "deny"
|
||||||
|
|
||||||
|
def test_approval_none_response_returns_deny(self):
|
||||||
|
"""When request_permission resolves to None, the callback should return 'deny'."""
|
||||||
|
loop = MagicMock(spec=asyncio.AbstractEventLoop)
|
||||||
|
mock_rp = MagicMock(name="request_permission")
|
||||||
|
|
||||||
|
future = MagicMock(spec=Future)
|
||||||
|
future.result.return_value = None
|
||||||
|
|
||||||
|
with patch("acp_adapter.permissions.asyncio.run_coroutine_threadsafe", return_value=future):
|
||||||
|
cb = make_approval_callback(mock_rp, loop, session_id="s1", timeout=1.0)
|
||||||
|
result = cb("echo hi", "demo")
|
||||||
|
|
||||||
|
assert result == "deny"
|
||||||
|
|||||||
Reference in New Issue
Block a user