[Bug]: UnsupportedSpecializationException with tuple
Nobody has claimed this yet.
Assessment
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Newbie friendliness
- 68/100
Research direction
Reproduce the crash with the provided uname_result.index(0, '') snippet, then inspect TupleBuiltins.java around IndexNode and the GetTupleStorageNode entry shown in the stack trace. The work is done when this call no longer raises UnsupportedSpecializationException and a regression test covers the reproducer.
Written by the indexing model from the issue text.
Description
Describe the bug
GraalPy crashes when running this fuzzed code:
from platform import uname_result
uname_result.index(0, '')
Operating system
Linux
CPU architecture
x86_64
GraalPy version
GraalPy 3.13.14 (Oracle GraalVM Native 25.3.4.1)
JDK version
No response
Context configuration
No response
Steps to reproduce
Snippet listed above
Expected behavior
No crash
Stack trace
Unexpected values provided for TupleNodesFactory.GetTupleStorageNodeGen.Inlined@3fff4484: [TupleBuiltinsFactory.IndexNodeFactory.IndexNodeGen@6b2b70a1, 0], [IndexNodeGen,Integer]
com.oracle.truffle.api.dsl.UnsupportedSpecializationException: Unexpected values provided for TupleNodesFactory.GetTupleStorageNodeGen.Inlined@3fff4484: [TupleBuiltinsFactory.IndexNodeFactory.IndexNodeGen@6b2b70a1, 0], [IndexNodeGen,Integer]
at org.graalvm.py/com.oracle.graal.python.nodes.builtins.TupleNodesFactory$GetTupleStorageNodeGen.newUnsupportedSpecializationException2(TupleNodesFactory.java:492)
at org.graalvm.py/com.oracle.graal.python.nodes.builtins.TupleNodesFactory$GetTupleStorageNodeGen$Inlined.executeAndSpecialize(TupleNodesFactory.java:556)
at org.graalvm.py/com.oracle.graal.python.nodes.builtins.TupleNodesFactory$GetTupleStorageNodeGen$Inlined.execute(TupleNodesFactory.java:539)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.tuple.TupleBuiltins$IndexNode.index(TupleBuiltins.java:178)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.tuple.TupleBuiltinsFactory$IndexNodeFactory$IndexNodeGen.executeWithoutClinic(TupleBuiltinsFactory.java:459)
at org.graalvm.py/com.oracle.graal.python.nodes.function.builtins.PythonQuaternaryClinicBuiltinNode.execute(PythonQuaternaryClinicBuiltinNode.java:104)
at org.graalvm.py/com.oracle.graal.python.nodes.function.builtins.BuiltinCallNode$BuiltinQuaternaryCallNode.execute(BuiltinCallNode.java:156)
at org.graalvm.py/com.oracle.graal.python.nodes.function.BuiltinFunctionRootNode.execute(BuiltinFunctionRootNode.java:337)
at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.executeRootNode(OptimizedCallTarget.java:808)
at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.profiledPERoot(OptimizedCallTarget.java:722)
at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:641)
at org.graalvm.truffle.runtime.svm/com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.invokeCallBoundary(SubstrateOptimizedCallTarget.java:124)
at com.oracle.truffle.enterprise.svm/com.oracle.svm.enterprise.truffle.compiler.SubstrateEnterpriseOptimizedCallTarget.invokeCompiledAdapterOrCallBoundary(SubstrateEnterpriseOptimizedCallTarget.java:293)
at com.oracle.truffle.enterprise.svm/com.oracle.svm.enterprise.truffle.compiler.SubstrateEnterpriseOptimizedCallTarget.invokeFromInterpreter(SubstrateEnterpriseOptimizedCallTarget.java:269)
at com.oracle.truffle.enterprise.svm/com.oracle.svm.enterprise.truffle.compiler.SubstrateEnterpriseOptimizedCallTarget.doInvoke(SubstrateEnterpriseOptimizedCallTarget.java:255)
at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:573)
at org.graalvm.truffle.runtime/com.oracle.truffle.runtime.OptimizedCallTarget.call(OptimizedCallTarget.java:519)
at org.graalvm.truffle/com.oracle.truffle.api.nodes.IndirectCallNode$1.call(IndirectCallNode.java:96)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallDispatchers$SimpleIndirectInvokeNode.doIndirect(CallDispatchers.java:167)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallDispatchersFactory$SimpleIndirectInvokeNodeGen$Uncached.execute(CallDispatchersFactory.java:307)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallDispatchers$BuiltinFunctionCachedCallNode.callBuiltinFunctionMegamorphic(CallDispatchers.java:265)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallDispatchersFactory$BuiltinFunctionCachedCallNodeGen$Uncached.execute(CallDispatchersFactory.java:1173)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallNode.builtinFunctionCall(CallNode.java:152)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallNodeGen$Uncached.executeInternal(CallNodeGen.java:619)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallNode.execute(CallNode.java:128)
at org.graalvm.py/com.oracle.graal.python.nodes.call.special.CallTernaryMethodNode.call(CallTernaryMethodNode.java:176)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen$CallTernaryMethod_Node.execute$uncached(PBytecodeDSLRootNodeGen.java)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen$UncachedBytecodeNodeTailCall.handleCallTernaryMethod_(PBytecodeDSLRootNodeGen.java:37882)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen$UncachedBytecodeNodeTailCall.__stub_handleCallTernaryMethod_(PBytecodeDSLRootNodeGen.java:0)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen$UncachedBytecodeNodeTailCall.continueAt(PBytecodeDSLRootNodeGen.java:35093)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen.continueAt(PBytecodeDSLRootNodeGen.java:3501)
at org.graalvm.py/com.oracle.graal.python.nodes.bytecode_dsl.PBytecodeDSLRootNodeGen.execute(PBytecodeDSLRootNodeGen.java:3493)
[...snip...]
Additional context
No response
- Dominant language
- Python
- Stars
- 1.6k
- Forks
- 155
- Avg merge
- 8h 58m
- Merged PRs (30d)
- 39
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from oracle/graalpython
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 74/100
oracle/graalpython#1105 ·
-
bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
oracle/graalpython#1102 ·
-
bug
Difficulty 4/5 3-5 days Newbie friendliness 45/100
oracle/graalpython#1157 · 1 assignee ·
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 74/100
oracle/graalpython#1133 ·
-
bug
Difficulty 3/5 1-2 days Newbie friendliness 68/100
oracle/graalpython#1112 ·
All issues in oracle/graalpython
Similar issues
-
enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
canonical/paas-charm#368 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
tech debt
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
StevenBlack/hosts#3256 ·
-
Difficulty 1/5 Under an hour Newbie friendliness 90/100
qualcomm/qai-appbuilder#275 ·