You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2022/12/13 02:46:23 UTC

[commons-crypto] branch master updated: Bullet-proofing

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 <ga...@gmail.com>
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);
         }
     }