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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-crypto.git


The following commit(s) were added to refs/heads/master by this push:
     new 79106e1  Bullet-proofing
79106e1 is described below

commit 79106e181ee875897f1922cfba2778defc34bae7
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Dec 12 21:46:19 2022 -0500

    Bullet-proofing
---
 .../commons/crypto/jna/OpenSslJnaCryptoRandom.java   | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git 
a/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java 
b/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java
index a8b4be9..babb712 100644
--- a/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java
+++ b/src/main/java/org/apache/commons/crypto/jna/OpenSslJnaCryptoRandom.java
@@ -84,7 +84,7 @@ final class OpenSslJnaCryptoRandom implements CryptoRandom {
         rdrandEnabled = rdrandLoaded;
 
         if (!rdrandLoaded) {
-            closeRdrandEngine();
+            closeRdrandEngine(false);
         }
     }
 
@@ -107,7 +107,7 @@ final class OpenSslJnaCryptoRandom implements CryptoRandom {
 
             final int byteLength = bytes.length;
             final ByteBuffer buf = ByteBuffer.allocateDirect(byteLength);
-            throwOnError(OpenSslNativeJna.RAND_bytes(buf, byteLength));
+            throwOnError(OpenSslNativeJna.RAND_bytes(buf, byteLength), false);
             buf.rewind();
             buf.get(bytes, 0, byteLength);
         }
@@ -119,7 +119,7 @@ final class OpenSslJnaCryptoRandom implements CryptoRandom {
      */
     @Override
     public void close() {
-        closeRdrandEngine();
+        closeRdrandEngine(true);
         OpenSslNativeJna.ENGINE_cleanup();
 
         //cleanup locks
@@ -129,12 +129,13 @@ final class OpenSslJnaCryptoRandom implements 
CryptoRandom {
 
     /**
      * Closes the rdrand engine.
+     * @param closing true when called while closing.
      */
-    private void closeRdrandEngine() {
+    private void closeRdrandEngine(final boolean closing) {
 
         if (rdrandEngine != null) {
-            throwOnError(OpenSslNativeJna.ENGINE_finish(rdrandEngine));
-            throwOnError(OpenSslNativeJna.ENGINE_free(rdrandEngine));
+            throwOnError(OpenSslNativeJna.ENGINE_finish(rdrandEngine), 
closing);
+            throwOnError(OpenSslNativeJna.ENGINE_free(rdrandEngine), closing);
         }
     }
 
@@ -149,12 +150,15 @@ final class OpenSslJnaCryptoRandom implements 
CryptoRandom {
 
     /**
      * @param retVal the result value of error.
+     * @param closing true when called while closing.
      */
-    private void throwOnError(final int retVal) {
+    private void throwOnError(final int retVal, final boolean closing) {
         if (retVal != 1) {
             final NativeLong err = OpenSslNativeJna.ERR_peek_error();
             final String errdesc = OpenSslNativeJna.ERR_error_string(err, 
null);
-            close();
+            if (!closing) {
+                close();
+            }
             throw new IllegalStateException("return code " + retVal + " from 
OpenSSL. Err code is " + err + ": " + errdesc);
         }
     }

Reply via email to