Skip to content

Commit b52d947

Browse files
committed
Sanitize CreateDynamic node
1 parent 04ec8a1 commit b52d947

File tree

1 file changed

+12
-9
lines changed

1 file changed

+12
-9
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/ImpModuleBuiltins.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,14 @@
9191
import com.oracle.graal.python.builtins.objects.object.PythonObject;
9292
import com.oracle.graal.python.builtins.objects.str.PString;
9393
import com.oracle.graal.python.compiler.Compiler;
94+
import com.oracle.graal.python.lib.PyObjectGetAttr;
9495
import com.oracle.graal.python.lib.PyObjectLookupAttr;
9596
import com.oracle.graal.python.lib.PyObjectSetAttr;
9697
import com.oracle.graal.python.lib.PyObjectStrAsTruffleStringNode;
9798
import com.oracle.graal.python.nodes.ErrorMessages;
9899
import com.oracle.graal.python.nodes.PConstructAndRaiseNode;
99100
import com.oracle.graal.python.nodes.PGuards;
100101
import com.oracle.graal.python.nodes.PRaiseNode;
101-
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromPythonObjectNode;
102102
import com.oracle.graal.python.nodes.attributes.WriteAttributeToPythonObjectNode;
103103
import com.oracle.graal.python.nodes.call.CallDispatchers;
104104
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
@@ -274,9 +274,7 @@ protected PBytes getMagicNumberPBytes() {
274274
}
275275
}
276276

277-
@Builtin(name = "__create_dynamic__", minNumOfPositionalArgs = 2)
278-
@GenerateNodeFactory
279-
public abstract static class CreateDynamic extends PythonBinaryBuiltinNode {
277+
public abstract static class CreateDynamic extends Node {
280278

281279
@Child private CheckFunctionResultNode checkResultNode;
282280

@@ -287,13 +285,18 @@ Object run(VirtualFrame frame, PythonObject moduleSpec, @SuppressWarnings("unuse
287285
@Bind Node inliningTarget,
288286
@Bind PythonContext context,
289287
@Cached("createFor($node)") IndirectCallData indirectCallData,
290-
@Cached ReadAttributeFromPythonObjectNode readNameNode,
291-
@Cached ReadAttributeFromPythonObjectNode readOriginNode,
288+
@Cached PyObjectGetAttr getAttr,
292289
@Cached CastToTruffleStringNode castToTruffleStringNode,
293290
@Cached TruffleString.EqualNode eqNode,
294-
@Cached PConstructAndRaiseNode.Lazy constructAndRaiseNode) {
295-
TruffleString name = castToTruffleStringNode.execute(inliningTarget, readNameNode.execute(moduleSpec, T_NAME));
296-
TruffleString path = castToTruffleStringNode.execute(inliningTarget, readOriginNode.execute(moduleSpec, T_ORIGIN));
291+
@Cached PConstructAndRaiseNode.Lazy constructAndRaiseNode,
292+
@Cached PRaiseNode raiseNode) {
293+
TruffleString name, path;
294+
try {
295+
name = castToTruffleStringNode.execute(inliningTarget, getAttr.execute(inliningTarget, moduleSpec, T_NAME));
296+
path = castToTruffleStringNode.execute(inliningTarget, getAttr.execute(inliningTarget, moduleSpec, T_ORIGIN));
297+
} catch (CannotCastException e) {
298+
throw raiseNode.raise(inliningTarget, TypeError, ErrorMessages.BAD_ARG_TYPE_FOR_BUILTIN_OP);
299+
}
297300

298301
PythonLanguage language = context.getLanguage(inliningTarget);
299302
Object state = IndirectCallContext.enter(frame, language, context, indirectCallData);

0 commit comments

Comments
 (0)