[Bug]: UnsupportedSpecializationException with csv.reader
Open
Nobody has claimed this yet.
bug
- Dominant language
- Python
- Stars
- 1.6k
- Forks
- 155
- Avg merge
- 9h 42m
- Merged PRs (30d)
- 36
Description
Describe the bug
GraalPy crashes when running this fuzzed code:
import re
from csv import reader
reader(re.ASCII, int)
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 CSVDialectBuiltinsFactory.DialectNodeFactory.DialectNodeGen@448c7dde: [Dialect, <class 'int'>, NoValue, NoValue, NoValue, NoValue, NoValue, NoValue, NoValue, NoValue], [PythonBuiltinClassType,PythonBuiltinClass,PNone,PNone,PNone,PNone,PNone,PNone,PNone,PNone]
com.oracle.truffle.api.dsl.UnsupportedSpecializationException: Unexpected values provided for CSVDialectBuiltinsFactory.DialectNodeFactory.DialectNodeGen@448c7dde: [Dialect, <class 'int'>, NoValue, NoValue, NoValue, NoValue, NoValue, NoValue, NoValue, NoValue], [PythonBuiltinClassType,PythonBuiltinClass,PNone,PNone,PNone,PNone,PNone,PNone,PNone,PNone]
at org.graalvm.py/com.oracle.graal.python.builtins.modules.csv.CSVDialectBuiltinsFactory$DialectNodeFactory$DialectNodeGen.executeAndSpecialize(CSVDialectBuiltinsFactory.java:571)
at org.graalvm.py/com.oracle.graal.python.builtins.modules.csv.CSVDialectBuiltinsFactory$DialectNodeFactory$DialectNodeGen.execute(CSVDialectBuiltinsFactory.java:434)
at org.graalvm.py/com.oracle.graal.python.nodes.function.builtins.BuiltinCallNode$BuiltinAnyCallNode.execute(BuiltinCallNode.java:64)
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.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:94)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallDispatchers$SimpleDirectInvokeNode.doDirect(CallDispatchers.java:128)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallDispatchersFactory$SimpleDirectInvokeNodeGen$Inlined.executeAndSpecialize(CallDispatchersFactory.java:135)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallDispatchersFactory$SimpleDirectInvokeNodeGen$Inlined.execute(CallDispatchersFactory.java:123)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.slots.TpSlotVarargs$DispatchVarargsBuiltinFullDirectNode.call(TpSlotVarargs.java:282)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.slots.TpSlotVarargsFactory$DispatchVarargsBuiltinFullDirectNodeGen$Inlined.executeAndSpecialize(TpSlotVarargsFactory.java:215)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.slots.TpSlotVarargsFactory$DispatchVarargsBuiltinFullDirectNodeGen$Inlined.execute(TpSlotVarargsFactory.java:203)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.slots.TpSlotVarargs$CallVarargsTpSlotBaseNode.callCachedBuiltin(TpSlotVarargs.java:254)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.slots.TpSlotVarargsFactory$CallSlotTpNewNodeGen$Inlined.executeAndSpecialize(TpSlotVarargsFactory.java:1603)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.slots.TpSlotVarargsFactory$CallSlotTpNewNodeGen$Inlined.execute(TpSlotVarargsFactory.java:1562)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.TypeBuiltins$CreateInstanceNode.doGeneric(TypeBuiltins.java:536)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.TypeBuiltinsFactory$CreateInstanceNodeGen$Inlined.executeAndSpecialize(TypeBuiltinsFactory.java:2021)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.TypeBuiltinsFactory$CreateInstanceNodeGen$Inlined.execute(TypeBuiltinsFactory.java:2009)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.TypeBuiltins$CallNode.call(TypeBuiltins.java:502)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.TypeBuiltinsFactory$CallNodeFactory$CallNodeGen.execute(TypeBuiltinsFactory.java:1820)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.slots.TpSlotVarargs$CallVarargsTpSlotBaseNode.callCachedBuiltin(TpSlotVarargs.java:251)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.slots.TpSlotVarargsFactory$CallSlotTpCallNodeGen$Inlined.executeAndSpecialize(TpSlotVarargsFactory.java:2220)
at org.graalvm.py/com.oracle.graal.python.builtins.objects.type.slots.TpSlotVarargsFactory$CallSlotTpCallNodeGen$Inlined.execute(TpSlotVarargsFactory.java:2179)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallNode.doGeneric(CallNode.java:217)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallNodeGen.executeAndSpecialize(CallNodeGen.java:333)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallNodeGen.executeInternal(CallNodeGen.java:249)
at org.graalvm.py/com.oracle.graal.python.nodes.call.CallNode.execute(CallNode.java:128)
at org.graalvm.py/com.oracle.graal.python.builtins.modules.csv.CSVModuleBuiltins$CSVReaderNode.createReader(CSVModuleBuiltins.java:241)
at org.graalvm.py/com.oracle.graal.python.builtins.modules.csv.CSVModuleBuiltinsFactory$CSVReaderNodeFactory$CSVReaderNodeGen.executeAndSpecialize(CSVModuleBuiltinsFactory.java:907)
at org.graalvm.py/com.oracle.graal.python.builtins.modules.csv.CSVModuleBuiltinsFactory$CSVReaderNodeFactory$CSVReaderNodeGen.execute(CSVModuleBuiltinsFactory.java:889)
at org.graalvm.py/com.oracle.graal.python.nodes.function.builtins.BuiltinCallNode$BuiltinAnyCallNode.execute(BuiltinCallNode.java:64)
at org.graalvm.py/com.oracle.graal.python.nodes.function.BuiltinFunctionRootNode.execute(BuiltinFunctionRootNode.java:337)
[...snip...]
Additional context
No response
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.
Research direction
Start with the csv.CSVDialectBuiltins and CSVModuleBuiltins entry points named in the stack trace, then run the reported csv.reader(re.ASCII, int) reproducer. Trace how the unsupported argument is handled and add a regression test demonstrating that the call no longer crashes and produces the expected behavior.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java, python
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 65/100