Hi,
While testing for the attached regex changes, a fatal vm init error was
triggered for test
case with -Djava.security.debug=xyz turned on, as showed in following
stacktrace.
It appears sun.security.util.Debug is being initialized even before the
lambda is ready
for use, and unfortunately it uses j.u.regex (for its args parsing),
which is being migrated
to use lambda function in the proposed regex change.
Since Debug is the only class now triggers j.u.regex -> lambda during
initialization, it
is suggested to update/rewrite the related method in Debug to NOT use
j.u.regex to
solve/workaround this specific initialization issue.
The webrev below has been updated to include such a change.
http://cr.openjdk.java.net/~sherman/regexBackTrack.Lamnda.CanonEQ/webrev/
The sun.security.util.Debug related change is at
http://cr.openjdk.java.net/~sherman/regexBackTrack.Lamnda.CanonEQ/webrev/src/java.base/share/classes/sun/security/util/Debug.java.sdiff.html
Can security-dev guys help take a look if this is an
acceptable/reasonable approach.
Thanks,
Sherman
-----------------------------------------------------------------------------
Caused by: java.lang.ExceptionInInitializerError
at
jdk.internal.loader.BootLoader.loadClassOrNull(java.base/BootLoader.java:110)
at
java.lang.invoke.BoundMethodHandle$Factory$1.apply(java.base/BoundMethodHandle.java:497)
at
java.lang.invoke.BoundMethodHandle$Factory$1.apply(java.base/BoundMethodHandle.java:492)
...
at
java.lang.invoke.MethodHandleNatives.linkCallSite(java.base/MethodHandleNatives.java:240)
at java.util.regex.Pattern.<clinit>(java.base/Pattern.java:5682)
at sun.security.util.Debug.marshal(java.base/Debug.java:247)
at sun.security.util.Debug.<clinit>(java.base/Debug.java:59)
at
java.security.ProtectionDomain.<clinit>(java.base/ProtectionDomain.java:142)
at
jdk.internal.misc.InnocuousThread.<clinit>(java.base/InnocuousThread.java:129)
at
jdk.internal.ref.CleanerFactory$1$1.run(java.base/CleanerFactory.java:48)
at
jdk.internal.ref.CleanerFactory$1$1.run(java.base/CleanerFactory.java:45)
at java.security.AccessController.doPrivileged(java.base/Native Method)
at
jdk.internal.ref.CleanerFactory$1.newThread(java.base/CleanerFactory.java:45)
at jdk.internal.ref.CleanerImpl.start(java.base/CleanerImpl.java:116)
at java.lang.ref.Cleaner.create(java.base/Cleaner.java:203)
at
jdk.internal.ref.CleanerFactory.<clinit>(java.base/CleanerFactory.java:42)
at sun.nio.fs.NativeBuffer.<init>(java.base/NativeBuffer.java:60)
at
sun.nio.fs.NativeBuffers.allocNativeBuffer(java.base/NativeBuffers.java:49)
at
sun.nio.fs.UnixNativeDispatcher.copyToNativeBuffer(java.base/UnixNativeDispatcher.java:44)
at
sun.nio.fs.UnixNativeDispatcher.stat(java.base/UnixNativeDispatcher.java:306)
at
sun.nio.fs.UnixFileSystemProvider.isRegularFile(java.base/UnixFileSystemProvider.java:514)
at java.nio.file.Files.isRegularFile(java.base/Files.java:2244)
at
java.lang.module.ModuleFinder.ofSystem(java.base/ModuleFinder.java:165)
at
jdk.internal.module.ModuleBootstrap.boot(java.base/ModuleBootstrap.java:105)
at java.lang.System.initPhase2(java.base/System.java:1924)
---------------------------------------------------------------------------------
On 3/18/16 1:05 PM, Xueming Shen wrote:
Hi,
There are couple regex related changes waiting for review. I have pull
them
together here (with the notes) to make it easy to review.
http://cr.openjdk.java.net/~sherman/regexBackTrack.Lamnda.CanonEQ/webrev/
(1) Exponential backtracking
Note:
http://cr.openjdk.java.net/~sherman/regexBackTrack.Lamnda.CanonEQ/backtracking
https://bugs.openjdk.java.net/browse/JDK-6328855
https://bugs.openjdk.java.net/browse/JDK-6192895
https://bugs.openjdk.java.net/browse/JDK-6345469
https://bugs.openjdk.java.net/browse/JDK-6988218
https://bugs.openjdk.java.net/browse/JDK-6693451
https://bugs.openjdk.java.net/browse/JDK-7006761
https://bugs.openjdk.java.net/browse/JDK-8140212
(2) Anonymous class to lambda function cleanup
Note:
http://cr.openjdk.java.net/~sherman/regexBackTrack.Lamnda.CanonEQ/lambdafunction
https://bugs.openjdk.java.net/browse/JDK-8151481
https://bugs.openjdk.java.net/browse/JDK-6609854
(3) Canonical Equivalents
Note:
http://cr.openjdk.java.net/~sherman/regexBackTrack.Lamnda.CanonEQ/canonEQ
https://bugs.openjdk.java.net/browse/JDK-4916384
https://bugs.openjdk.java.net/browse/JDK-4867170
https://bugs.openjdk.java.net/browse/JDK-6995635
https://bugs.openjdk.java.net/browse/JDK-6728861
https://bugs.openjdk.java.net/browse/JDK-6736245
https://bugs.openjdk.java.net/browse/JDK-7080302
Thanks
Sherman