[8u] RFR 8254631: Better support ALPN byte wire values in SunJSSE
    Severin Gehwolf 
    sgehwolf at redhat.com
       
    Wed May 26 16:00:36 UTC 2021
    
    
  
Hi Martin,
On Tue, 2021-05-18 at 12:06 -0400, Martin Balao wrote:
> 
> Yes, I didn't put much thinking into this but you are right:
> performance can be improved. In that regard, looks to me that wrapping
> with a ByteBuffer may not be necessary when we consider the
> precondition that, inside the outer loop [1], 'bytes' array will be
> equal or greater than 'grease' array.
> 
> Please have a look at this proposal:
> 
>  *
> http://cr.openjdk.java.net/~mbalao/webrevs/8254631/8254631.webrev.jdk8u.jdk.01/
I only now realize that there is an off-by-one error in the original
code:
+    private static void findGreaseInClientHello(byte[] bytes) throws Exception {
+        for (int i = 0; i < bytes.length - greaseBytes.length; i++) {
+            if (Arrays.equals(bytes, i, i + greaseBytes.length,
+                    greaseBytes, 0, greaseBytes.length)) {
Should be:
+    private static void findGreaseInClientHello(byte[] bytes) throws Exception {
+        for (int i = 0; i < bytes.length - greaseBytes.length + 1; i++) {
+            if (Arrays.equals(bytes, i, i + greaseBytes.length,
+                    greaseBytes, 0, greaseBytes.length)) {
Otherwise the grease bytes wouldn't be found if they'd be at the end of
the client hello bytes. I don't think that's very likely, but we should
fix it anyway.
  85     private static void findGreaseInClientHello(byte[] bytes) throws Exception {
  86         for (int i = 0; i < bytes.length - greaseBytes.length + 1; i++) {
  87             if (findGreaseInArray(bytes, i)) {
  88                 System.out.println("Found greaseBytes in ClientHello at: " + i);
  89                 return;
  90             }
Perhaps we should file a bug for fixing it in later releases too.
I don't need to see another webrev for this. Reviewed.
Thanks,
Severin
    
    
More information about the jdk8u-dev
mailing list