This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch 11.0.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/11.0.x by this push:
     new 71a78ec970 Refactoring to reduce code duplication
71a78ec970 is described below

commit 71a78ec9709f5457ad6bad0da5d9f6c5e620c04d
Author: Mark Thomas <[email protected]>
AuthorDate: Thu Apr 9 09:56:12 2026 +0100

    Refactoring to reduce code duplication
---
 .../tomcat/util/net/openssl/panama/OpenSSLContext.java  | 13 +------------
 .../tomcat/util/net/openssl/panama/OpenSSLEngine.java   | 14 +-------------
 .../tomcat/util/net/openssl/panama/OpenSSLLibrary.java  | 17 ++++++++++++++++-
 3 files changed, 18 insertions(+), 26 deletions(-)

diff --git a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java 
b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java
index 8cce27d5db..9ea93952ca 100644
--- a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java
+++ b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLContext.java
@@ -809,18 +809,7 @@ public class OpenSSLContext implements 
org.apache.tomcat.util.net.SSLContext {
             int len = openssl_h_Compatibility.OPENSSL_sk_num(sk);
             byte[][] certificateChain = new byte[len][];
             try (var localArena = Arena.ofConfined()) {
-                for (int i = 0; i < len; i++) {
-                    MemorySegment/* (X509*) */ x509 = 
openssl_h_Compatibility.OPENSSL_sk_value(sk, i);
-                    MemorySegment bufPointer = 
localArena.allocateFrom(ValueLayout.ADDRESS, MemorySegment.NULL);
-                    int length = i2d_X509(x509, bufPointer);
-                    if (length <= 0) {
-                        certificateChain[i] = new byte[0];
-                        continue;
-                    }
-                    MemorySegment buf = bufPointer.get(ValueLayout.ADDRESS, 0);
-                    certificateChain[i] = buf.reinterpret(length, localArena, 
null).toArray(ValueLayout.JAVA_BYTE);
-                    OPENSSL_free(buf);
-                }
+                OpenSSLLibrary.populateCertifcateChain(localArena, sk, 
certificateChain);
                 MemorySegment cipher = SSL_get_current_cipher(ssl);
                 String authMethod = (MemorySegment.NULL.equals(cipher)) ? 
"UNKNOWN" :
                         
getCipherAuthenticationMethod(SSL_CIPHER_get_auth_nid(cipher), 
SSL_CIPHER_get_kx_nid(cipher));
diff --git a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java 
b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java
index 315b506f13..947b0f4ee0 100644
--- a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java
+++ b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLEngine.java
@@ -860,19 +860,7 @@ public final class OpenSSLEngine extends SSLEngine 
implements SSLUtil.ProtocolIn
         }
         byte[][] certificateChain = new byte[len][];
         try (var localArena = Arena.ofConfined()) {
-            for (int i = 0; i < len; i++) {
-                MemorySegment/* (X509*) */ x509 = 
openssl_h_Compatibility.OPENSSL_sk_value(sk, i);
-                MemorySegment bufPointer = 
localArena.allocateFrom(ValueLayout.ADDRESS, MemorySegment.NULL);
-                int length = i2d_X509(x509, bufPointer);
-                if (length <= 0) {
-                    certificateChain[i] = new byte[0];
-                    continue;
-                }
-                MemorySegment buf = bufPointer.get(ValueLayout.ADDRESS, 0);
-                byte[] certificate = buf.reinterpret(length, localArena, 
null).toArray(ValueLayout.JAVA_BYTE);
-                certificateChain[i] = certificate;
-                OPENSSL_free(buf);
-            }
+            OpenSSLLibrary.populateCertifcateChain(localArena, sk, 
certificateChain);
             return certificateChain;
         }
     }
diff --git a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLLibrary.java 
b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLLibrary.java
index c1bb2cb664..5367642699 100644
--- a/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLLibrary.java
+++ b/java/org/apache/tomcat/util/net/openssl/panama/OpenSSLLibrary.java
@@ -26,6 +26,7 @@ import java.util.List;
 
 import static org.apache.tomcat.util.openssl.openssl_h.*;
 import static org.apache.tomcat.util.openssl.openssl_h_Compatibility.*;
+import static org.apache.tomcat.util.openssl.openssl_h_Macros.*;
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
 import org.apache.tomcat.util.net.openssl.OpenSSLStatus;
@@ -504,5 +505,19 @@ public class OpenSSLLibrary {
         return sslError;
     }
 
-
+    static void populateCertifcateChain(Arena localArena, MemorySegment /* 
STACK_OF(X509) */ sk,
+            byte[][] certificateChain) {
+        for (int i = 0; i < certificateChain.length; i++) {
+            MemorySegment/* (X509*) */ x509 = 
openssl_h_Compatibility.OPENSSL_sk_value(sk, i);
+            MemorySegment bufPointer = 
localArena.allocateFrom(ValueLayout.ADDRESS, MemorySegment.NULL);
+            int length = i2d_X509(x509, bufPointer);
+            if (length <= 0) {
+                certificateChain[i] = new byte[0];
+                continue;
+            }
+            MemorySegment buf = bufPointer.get(ValueLayout.ADDRESS, 0);
+            certificateChain[i] = buf.reinterpret(length, localArena, 
null).toArray(ValueLayout.JAVA_BYTE);
+            OPENSSL_free(buf);
+        }
+    }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to