When a tool method returns a Hash where one of the values is a non-primitive type, calling eval causes a segfault instead of returning an error result.
Reproduction
require "enclave"
class Tools
Opaque = Struct.new(:x)
def bad_hash
{ "ok" => "fine", "bad" => Opaque.new("x") }
end
end
enclave = Enclave.new(tools: Tools.new)
enclave.eval("bad_hash")
Expected: result.error returns "TypeError: unsupported type for sandbox: Tools::Opaque"
Actual: Segfault
[BUG] Segmentation fault at 0x0000000000000020
ruby 3.1.7p261 [arm64-darwin]
-- Ruby level backtrace information ----------------------------------------
test.rb:12:in `<main>'
.../enclave-0.2.0/lib/enclave.rb:31:in `eval'
.../enclave-0.2.0/lib/enclave.rb:31:in `_eval'
-- Machine register context ------------------------------------------------
x0: 0x0000000000000020 x1: 0x0000000000000000 x2: 0x0000000000000000
x19: 0x0000000000000020 x20: 0x0000000000000020 x21: 0x0000000000000001
x28: 0x0000000000000002
Environment
- enclave 0.2.0
- ruby 3.1.7 [arm64-darwin]
When a tool method returns a
Hashwhere one of the values is a non-primitive type, callingevalcauses a segfault instead of returning an error result.Reproduction
Expected:
result.errorreturns"TypeError: unsupported type for sandbox: Tools::Opaque"Actual: Segfault
Environment