Skip to content

File.fnmatch('/**/file0', '/', File::FNM_PATHNAME) causes ArrayIndexOutOfBoundsException #1845

@deepj

Description

@deepj

To reproduce:

ruby -e "File.fnmatch('/**/file0', '/', File::FNM_PATHNAME)"

Error:

-e:1:in `fnmatch': Index 1 out of bounds for length 1 (ArrayIndexOutOfBoundsException) (RuntimeError)
	from org.truffleruby.core.support.IONodes$FileFNMatchPrimitiveNode.fnmatch(IONodes.java:306)
	from org.truffleruby.core.support.IONodes$FileFNMatchPrimitiveNode.fnmatch(IONodes.java:126)
	from org.truffleruby.core.support.IONodesFactory$FileFNMatchPrimitiveNodeFactory$FileFNMatchPrimitiveNodeGen.executeAndSpecialize(IONodesFactory.java:220)
	from org.truffleruby.core.support.IONodesFactory$FileFNMatchPrimitiveNodeFactory$FileFNMatchPrimitiveNodeGen.execute(IONodesFactory.java:205)
	from org.truffleruby.language.control.OrNode.execute(OrNode.java:41)
	from org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:35)
	from org.truffleruby.language.methods.CatchForMethodNode.execute(CatchForMethodNode.java:39)
	from org.truffleruby.language.methods.ExceptionTranslatingNode.execute(ExceptionTranslatingNode.java:32)
	from org.truffleruby.language.LazyRubyNode.execute(LazyRubyNode.java:43)
	from org.truffleruby.language.RubyRootNode.execute(RubyRootNode.java:61)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:348)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:338)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:325)
	from com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:135)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:256)
	from org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:64)
	from org.truffleruby.language.dispatch.CachedDispatchNode.call(CachedDispatchNode.java:193)
	from org.truffleruby.language.dispatch.CachedSingletonDispatchNode.executeDispatch(CachedSingletonDispatchNode.java:95)
	from org.truffleruby.language.dispatch.UnresolvedDispatchNode.executeDispatch(UnresolvedDispatchNode.java:136)
	from org.truffleruby.language.dispatch.DispatchHeadNode.dispatch(DispatchHeadNode.java:44)
	from org.truffleruby.language.dispatch.RubyCallNode.executeWithArgumentsEvaluated(RubyCallNode.java:115)
	from org.truffleruby.language.dispatch.RubyCallNode.execute(RubyCallNode.java:103)
	from org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:35)
	from org.truffleruby.language.methods.CatchNextNode.execute(CatchNextNode.java:31)
	from org.truffleruby.language.methods.CatchForMethodNode.execute(CatchForMethodNode.java:39)
	from org.truffleruby.language.methods.CatchRetryAsErrorNode.execute(CatchRetryAsErrorNode.java:32)
	from org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:35)
	from org.truffleruby.language.methods.ExceptionTranslatingNode.execute(ExceptionTranslatingNode.java:32)
	from org.truffleruby.language.exceptions.TopLevelRaiseHandler.execute(TopLevelRaiseHandler.java:39)
	from org.truffleruby.language.RubyRootNode.execute(RubyRootNode.java:61)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:348)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:338)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:325)
	from com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:135)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callIndirect(OptimizedCallTarget.java:244)
	from org.graalvm.compiler.truffle.runtime.OptimizedIndirectCallNode.call(OptimizedIndirectCallNode.java:48)
	from org.truffleruby.language.loader.CodeLoader$DeferredCall.call(CodeLoader.java:107)
	from org.truffleruby.language.TruffleBootNodes$MainNode.main(TruffleBootNodes.java:155)
	from org.truffleruby.language.TruffleBootNodesFactory$MainNodeFactory$MainNodeGen.executeAndSpecialize(TruffleBootNodesFactory.java:384)
	from org.truffleruby.language.TruffleBootNodesFactory$MainNodeFactory$MainNodeGen.execute(TruffleBootNodesFactory.java:363)
	from org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:35)
	from org.truffleruby.language.methods.ExceptionTranslatingNode.execute(ExceptionTranslatingNode.java:32)
	from org.truffleruby.language.RubyRootNode.execute(RubyRootNode.java:61)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:348)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:338)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:325)
	from com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:135)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:256)
	from org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:64)
	from org.truffleruby.language.dispatch.CachedDispatchNode.call(CachedDispatchNode.java:193)
	from org.truffleruby.language.dispatch.CachedSingletonDispatchNode.executeDispatch(CachedSingletonDispatchNode.java:95)
	from org.truffleruby.language.dispatch.UnresolvedDispatchNode.executeDispatch(UnresolvedDispatchNode.java:136)
	from org.truffleruby.language.dispatch.DispatchHeadNode.dispatch(DispatchHeadNode.java:44)
	from org.truffleruby.language.dispatch.RubyCallNode.executeWithArgumentsEvaluated(RubyCallNode.java:115)
	from org.truffleruby.language.dispatch.RubyCallNode.execute(RubyCallNode.java:103)
	from org.truffleruby.language.methods.ExceptionTranslatingNode.execute(ExceptionTranslatingNode.java:32)
	from org.truffleruby.language.control.SequenceNode.execute(SequenceNode.java:35)
	from org.truffleruby.language.methods.CatchForLambdaNode.execute(CatchForLambdaNode.java:49)
	from org.truffleruby.language.RubyRootNode.execute(RubyRootNode.java:61)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:348)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:338)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:325)
	from com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:135)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callDirect(OptimizedCallTarget.java:256)
	from org.graalvm.compiler.truffle.runtime.OptimizedDirectCallNode.call(OptimizedDirectCallNode.java:64)
	from org.truffleruby.language.yield.CallBlockNode.callBlockCached(CallBlockNode.java:53)
	from org.truffleruby.language.yield.CallBlockNodeGen.executeAndSpecialize(CallBlockNodeGen.java:100)
	from org.truffleruby.language.yield.CallBlockNodeGen.executeCallBlock(CallBlockNodeGen.java:56)
	from org.truffleruby.language.yield.YieldNode.dispatch(YieldNode.java:37)
	from org.truffleruby.language.yield.YieldNodeGen.executeAndSpecialize(YieldNodeGen.java:46)
	from org.truffleruby.language.yield.YieldNodeGen.executeDispatchWithArrayArguments(YieldNodeGen.java:33)
	from org.truffleruby.language.yield.YieldNode.executeDispatch(YieldNode.java:29)
	from org.truffleruby.interop.ForeignExecuteHelperNode.callProc(ForeignExecuteHelperNode.java:32)
	from org.truffleruby.interop.ForeignExecuteHelperNodeGen.executeAndSpecialize(ForeignExecuteHelperNodeGen.java:69)
	from org.truffleruby.interop.ForeignExecuteHelperNodeGen.executeCall(ForeignExecuteHelperNodeGen.java:53)
	from org.truffleruby.interop.RubyObjectType.execute(RubyObjectType.java:493)
	from org.truffleruby.interop.RubyObjectTypeGen$InteropLibraryExports$Cached.executeNode_AndSpecialize(RubyObjectTypeGen.java:1078)
	from org.truffleruby.interop.RubyObjectTypeGen$InteropLibraryExports$Cached.execute(RubyObjectTypeGen.java:1064)
	from com.oracle.truffle.api.interop.InteropLibraryGen$CachedDispatch.execute(InteropLibraryGen.java:3137)
	from com.oracle.truffle.polyglot.PolyglotValue$InteropCodeCache$AbstractExecuteNode.executeShared(PolyglotValue.java:1699)
	from com.oracle.truffle.polyglot.PolyglotValue$InteropCodeCache$ExecuteNode.executeImpl(PolyglotValue.java:1780)
	from com.oracle.truffle.polyglot.HostToGuestRootNode.execute(HostToGuestRootNode.java:98)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callProxy(OptimizedCallTarget.java:348)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callRoot(OptimizedCallTarget.java:338)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget.callBoundary(OptimizedCallTarget.java:325)
	from com.oracle.svm.truffle.api.SubstrateOptimizedCallTarget.doInvoke(SubstrateOptimizedCallTarget.java:135)
	from org.graalvm.compiler.truffle.runtime.OptimizedCallTarget$OptimizedCallProfiled.call(OptimizedCallTarget.java:937)
	from com.oracle.truffle.polyglot.PolyglotValue$InteropValue.execute(PolyglotValue.java:2459)
	from org.graalvm.polyglot.Value.execute(Value.java:368)
	from org.truffleruby.launcher.RubyLauncher.runRubyMain(RubyLauncher.java:233)
	from org.truffleruby.launcher.RubyLauncher.launch(RubyLauncher.java:121)
	from org.graalvm.launcher.AbstractLanguageLauncher.launch(AbstractLanguageLauncher.java:121)
	from org.graalvm.launcher.AbstractLanguageLauncher.launch(AbstractLanguageLauncher.java:70)
	from org.truffleruby.launcher.RubyLauncher.main(RubyLauncher.java:38)
Translated to internal error
	from -e:1:in `<main>'

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions