Skip to content

Commit 0c3f184

Browse files
manefzrwstauner
andcommitted
Throw a runtime error if #binding is called from a
C ext module (non-ruby frame) Co-authored-by: Randy Stauner <[email protected]>
1 parent 90bfaa0 commit 0c3f184

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

src/main/java/org/truffleruby/core/kernel/KernelNodes.java

+6
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,12 @@ RubyBinding binding(Frame callerFrame, Object self, Object[] rubyArgs, RootCallT
334334
@Cached(
335335
value = "getAdoptedNode(this).getEncapsulatingSourceSection()",
336336
allowUncached = true, neverDefault = false) SourceSection sourceSection) {
337+
final InternalMethod method = RubyArguments.tryGetMethod(callerFrame);
338+
if (method == null || method.getDeclaringModule().toString().equals("Truffle::CExt")) {
339+
throw new RaiseException(getContext(),
340+
coreExceptions().runtimeError("You cannot call Kernel#Binding from a non-ruby frame", this));
341+
342+
}
337343
needCallerFrame(callerFrame, target);
338344
return BindingNodes.createBinding(getContext(), getLanguage(), callerFrame.materialize(), sourceSection);
339345
}

0 commit comments

Comments
 (0)