ArrayIndexOutOfBoundsException and NPE in regexp-Code
Jim Laskey (Oracle)
james.laskey at oracle.com
Wed Jul 2 11:05:45 UTC 2014
Benjamin,
We've run into a few cases where Joni (regex) is not safe across threads. This has been fixed in 8u20 http://hg.openjdk.java.net/jdk8u/jdk8u-dev/nashorn/rev/9ad26ed8cc97 . The workaround is to use new RegExp("...") so that the regexp is not shared. If you are iterating through a loop, hoist the expression outside the loop.
Cheers,
-- Jim
On Jul 2, 2014, at 6:39 AM, Benjamin Sieffert <benjamin.sieffert at metrigo.de> wrote:
> Hello everyone,
>
> we are running jdk8u5 and seeing occasional errors in the nashorn-internal
> regexp classes.
> The regex in use is a very simple one that basically is just supposed to do
> several string matches in a readable manner like /some
> string|stringtotestfor|test for this string too/
>
> Some sample stacktraces:
>
> 1) ArrayIndexOutOfBoundsException: 8
>
> jdk.nashorn.internal.runtime.regexp.joni.ByteCodeMachine.opExactNIC(ByteCodeMachine.java:381):1
> in ""
>
> jdk.nashorn.internal.runtime.regexp.joni.ByteCodeMachine.matchAt(ByteCodeMachine.java:129):1
> in ""
>
> jdk.nashorn.internal.runtime.regexp.joni.Matcher.matchCheck(Matcher.java:272):1
> in ""
>
> jdk.nashorn.internal.runtime.regexp.joni.Matcher.search(Matcher.java:405):1
> in ""
>
> jdk.nashorn.internal.runtime.regexp.JoniRegExp$JoniMatcher.search(JoniRegExp.java:131):1
> in ""
>
> jdk.nashorn.internal.objects.NativeRegExp.execInner(NativeRegExp.java:559):1
> in ""
>
> jdk.nashorn.internal.objects.NativeRegExp.test(NativeRegExp.java:643):1 in
> ""
>
> jdk.nashorn.internal.objects.NativeRegExp.test(NativeRegExp.java:322):1 in
> ""
>
> jdk.nashorn.internal.scripts.Script$library$2._L356(library:460):1 in ""
>
> 2) NPE
>
> jdk.nashorn.internal.runtime.regexp.joni.ByteCodeMachine.opExactN(ByteCodeMachine.java:361):1
> in ""
>
> jdk.nashorn.internal.runtime.regexp.joni.ByteCodeMachine.matchAt(ByteCodeMachine.java:126):1
> in ""
>
> jdk.nashorn.internal.runtime.regexp.joni.Matcher.matchCheck(Matcher.java:272):1
> in ""
>
> jdk.nashorn.internal.runtime.regexp.joni.Matcher.search(Matcher.java:405):1
> in ""
>
> jdk.nashorn.internal.runtime.regexp.JoniRegExp$JoniMatcher.search(JoniRegExp.java:131):1
> in ""
>
> jdk.nashorn.internal.objects.NativeRegExp.execInner(NativeRegExp.java:559):1
> in ""
>
> jdk.nashorn.internal.objects.NativeRegExp.test(NativeRegExp.java:643):1 in
> ""
>
> jdk.nashorn.internal.objects.NativeRegExp.test(NativeRegExp.java:322):1 in
> ""
>
> jdk.nashorn.internal.scripts.Script$library$2._L356(library:460):1 in ""
>
> Would be nice to get some input on this. Sadly, there I don't have a
> reliable way to reproduce this
> right now. Script gets evaluated in a multithreaded environment, so it
> might have something to do with that.
>
> Regards
>
> --
> Benjamin Sieffert
> metrigo GmbH
> Sternstr. 106
> 20357 Hamburg
>
> Geschäftsführer: Christian Müller, Tobias Schlottke, Philipp Westermeyer,
> Martin Rieß
> Die Gesellschaft ist eingetragen beim Registergericht Hamburg
> Nr. HRB 120447.
More information about the nashorn-dev
mailing list