From 59b9e9ad463d1506e216f3844db0f2229f79e6eb Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Fri, 11 Aug 2023 15:48:36 +0000 Subject: [PATCH 1/3] Fix possible mockito gc overhead Signed-off-by: Arthur Chan --- .../AuthorizationTokenServiceFuzzer.java | 351 +++++++++--------- projects/keycloak/build.sh | 2 +- 2 files changed, 168 insertions(+), 185 deletions(-) diff --git a/projects/keycloak/AuthorizationTokenServiceFuzzer.java b/projects/keycloak/AuthorizationTokenServiceFuzzer.java index 0c7cb445..3b40422a 100644 --- a/projects/keycloak/AuthorizationTokenServiceFuzzer.java +++ b/projects/keycloak/AuthorizationTokenServiceFuzzer.java @@ -60,229 +60,212 @@ public class AuthorizationTokenServiceFuzzer { private static KeycloakContext context; private static KeycloakSession session; - public static void fuzzerInitialize() { - mockInstance(); - } - public static void fuzzerTestOneInput(FuzzedDataProvider data) { try { - // Randomize mock fields of mocked object instance - randomizeMockData(data); + // Create mock object + MockObject mockObject = new MockObject(); + + // Create and randomize mock fields of mocked object instance + mockObject.mockInstance(); + mockObject.randomizeMockData(data); // Create KeycloakAuthorizationRequest instance AuthorizationTokenService.KeycloakAuthorizationRequest request = - createKeycloakAuthorizationRequest(data); + mockObject.createKeycloakAuthorizationRequest(data); // Invoke the authorize method AuthorizationTokenService.instance().authorize(request); } catch (CorsErrorResponseException e) { // Known exception } finally { + // Clean up inline mocks of the mock objects + Mockito.framework().clearInlineMocks(); + // Suggest the java garbage collector to clean up unused memory System.gc(); } } - private static void mockInstance() { - mockRealmModel(); - mockClientModel(); - mockHttpHeaders(); - mockClientConnection(); - mockKeycloakUriInfo(); - mockKeycloakContext(); - mockKeycloakSession(); - } + private static class MockObject { + private RealmModel realmModel; + private ClientModel clientModel; + private HttpHeaders headers; + private ClientConnection clientConnection; + private KeycloakUriInfo uriInfo; + private KeycloakContext context; + private KeycloakSession session; + + private void mockInstance() { + mockRealmModel(); + mockClientModel(); + mockHttpHeaders(); + mockClientConnection(); + mockKeycloakUriInfo(); + mockKeycloakContext(); + mockKeycloakSession(); + } - private static void randomizeMockData(FuzzedDataProvider data) { - randomizeRealmModel(data); - randomizeClientModel(data); - randomizeHttpHeaders(data); - randomizeClientConnection(data); - randomizeKeycloakUriInfo(data); - randomizeKeycloakSession(data); - } + private void randomizeMockData(FuzzedDataProvider data) { + randomizeRealmModel(data); + randomizeClientModel(data); + randomizeHttpHeaders(data); + randomizeClientConnection(data); + randomizeKeycloakUriInfo(data); + randomizeKeycloakSession(data); + } - private static void mockRealmModel() { - // Create and mock RealmModel with static data - realmModel = Mockito.mock(RealmModel.class); - Mockito.when(realmModel.getName()).thenReturn("realm"); - } + private void mockRealmModel() { + // Create and mock RealmModel with static data + realmModel = Mockito.mock(RealmModel.class); + Mockito.when(realmModel.getName()).thenReturn("realm"); + } - private static void mockClientModel() { - // Create and mock ClientModel with static data - clientModel = Mockito.mock(ClientModel.class); - Mockito.when(clientModel.getRealm()).thenReturn(realmModel); - } + private void mockClientModel() { + // Create and mock ClientModel with static data + clientModel = Mockito.mock(ClientModel.class); + Mockito.when(clientModel.getRealm()).thenReturn(realmModel); + } - private static void mockHttpHeaders() { - // Create and mock HttpHeaders with static data - headers = Mockito.mock(HttpHeaders.class); - } + private void mockHttpHeaders() { + // Create and mock HttpHeaders with static data + headers = Mockito.mock(HttpHeaders.class); + } - private static void mockClientConnection() { - // Create and mock ClientConnection with static data - clientConnection = Mockito.mock(ClientConnection.class); - } + private void mockClientConnection() { + // Create and mock ClientConnection with static data + clientConnection = Mockito.mock(ClientConnection.class); + Mockito.when(clientModel.getAttributes()).thenReturn(Collections.emptyMap()); + } - private static void mockKeycloakUriInfo() { - uriInfo = Mockito.mock(KeycloakUriInfo.class); - try { - Mockito.when(uriInfo.getBaseUri()).thenReturn(new URI("http://localhost")); - } catch (URISyntaxException e) { - // Known exception + private void mockKeycloakUriInfo() { + uriInfo = Mockito.mock(KeycloakUriInfo.class); + try { + Mockito.when(uriInfo.getBaseUri()).thenReturn(new URI("http://localhost")); + } catch (URISyntaxException e) { + // Known exception + } } - } - private static void mockKeycloakContext() { - // Create and mock KeycloakContext with static data - context = Mockito.mock(KeycloakContext.class); - Mockito.when(context.getClient()).thenReturn(clientModel); - Mockito.when(context.getRealm()).thenReturn(realmModel); - Mockito.when(context.getRequestHeaders()).thenReturn(headers); - Mockito.when(context.getConnection()).thenReturn(clientConnection); - Mockito.when(context.getUri()).thenReturn(uriInfo); - } + private void mockKeycloakContext() { + // Create and mock KeycloakContext with static data + context = Mockito.mock(KeycloakContext.class); + Mockito.when(context.getClient()).thenReturn(clientModel); + Mockito.when(context.getRealm()).thenReturn(realmModel); + Mockito.when(context.getRequestHeaders()).thenReturn(headers); + Mockito.when(context.getConnection()).thenReturn(clientConnection); + Mockito.when(context.getUri()).thenReturn(uriInfo); + } - private static void mockKeycloakSession() { - // Create and mock KeycloakSession with static data - session = Mockito.mock(KeycloakSession.class); - - // Create and mock KeycloakSessionFactory object - KeycloakSessionFactory keycloakSessionFactory = Mockito.mock(KeycloakSessionFactory.class); - Mockito.doReturn(session).when(keycloakSessionFactory).create(); - - // Create and mock RealmProvider - RealmProvider realmProvider = Mockito.mock(RealmProvider.class); - Mockito.when(realmProvider.getRealm(Mockito.any())).thenReturn(realmModel); - Mockito.when(realmProvider.getRealmByName(Mockito.any())).thenReturn(realmModel); - - // Create and mock ClientProvider - ClientProvider clientProvider = Mockito.mock(ClientProvider.class); - Mockito.when(clientProvider.getClientById(Mockito.any(), Mockito.any())) - .thenReturn(clientModel); - Mockito.when(clientProvider.getClientByClientId(Mockito.any(), Mockito.any())) - .thenReturn(clientModel); - - // Create mock return for KeycloakSessionObject - Mockito.when(session.getKeycloakSessionFactory()).thenReturn(keycloakSessionFactory); - Mockito.when(session.getContext()).thenReturn(context); - Mockito.doReturn(realmProvider).when(session).realms(); - Mockito.doReturn(clientProvider).when(session).clients(); - } + private void mockKeycloakSession() { + // Create and mock KeycloakSession with static data + session = Mockito.mock(KeycloakSession.class); + + // Create and mock KeycloakSessionFactory object + KeycloakSessionFactory keycloakSessionFactory = Mockito.mock(KeycloakSessionFactory.class); + Mockito.doReturn(session).when(keycloakSessionFactory).create(); + + // Create and mock RealmProvider + RealmProvider realmProvider = Mockito.mock(RealmProvider.class); + Mockito.when(realmProvider.getRealm(Mockito.any())).thenReturn(realmModel); + Mockito.when(realmProvider.getRealmByName(Mockito.any())).thenReturn(realmModel); + + // Create and mock ClientProvider + ClientProvider clientProvider = Mockito.mock(ClientProvider.class); + Mockito.when(clientProvider.getClientById(Mockito.any(), Mockito.any())) + .thenReturn(clientModel); + Mockito.when(clientProvider.getClientByClientId(Mockito.any(), Mockito.any())) + .thenReturn(clientModel); + + // Create mock return for KeycloakSessionObject + Mockito.when(session.getKeycloakSessionFactory()).thenReturn(keycloakSessionFactory); + Mockito.when(session.getContext()).thenReturn(context); + Mockito.doReturn(realmProvider).when(session).realms(); + Mockito.doReturn(clientProvider).when(session).clients(); + } - private static void randomizeRealmModel(FuzzedDataProvider data) { - // Randomize mock fields of Realm Model instance - Mockito.when(realmModel.getId()).thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(realmModel.isEventsEnabled()).thenReturn(data.consumeBoolean()); - Mockito.when(realmModel.getDefaultSignatureAlgorithm()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - } + private void randomizeRealmModel(FuzzedDataProvider data) { + // Randomize mock fields of Realm Model instance + Mockito.when(realmModel.getId()).thenReturn(data.consumeString(data.remainingBytes() / 2)); + Mockito.when(realmModel.isEventsEnabled()).thenReturn(data.consumeBoolean()); + Mockito.when(realmModel.getDefaultSignatureAlgorithm()) + .thenReturn(data.consumeString(data.remainingBytes() / 2)); + } - private static void randomizeClientModel(FuzzedDataProvider data) { - // Randomize mock fields of Client Model instance - Mockito.when(clientModel.getId()).thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getClientId()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getName()).thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getDescription()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.isEnabled()).thenReturn(data.consumeBoolean()); - Mockito.when(clientModel.isAlwaysDisplayInConsole()).thenReturn(data.consumeBoolean()); - Mockito.when(clientModel.getWebOrigins()) - .thenReturn(Set.of(data.consumeString(data.remainingBytes() / 2))); - Mockito.when(clientModel.getRedirectUris()) - .thenReturn(Set.of(data.consumeString(data.remainingBytes() / 2))); - Mockito.when(clientModel.getManagementUrl()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getRootUrl()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getBaseUrl()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getNodeReRegistrationTimeout()).thenReturn(data.consumeInt()); - Mockito.when(clientModel.getClientAuthenticatorType()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.validateSecret(Mockito.any(String.class))) - .thenReturn(data.consumeBoolean()); - Mockito.when(clientModel.getSecret()).thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getRegistrationToken()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getProtocol()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getAttribute(Mockito.any(String.class))) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getAuthenticationFlowBindingOverride(Mockito.any(String.class))) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.isFrontchannelLogout()).thenReturn(data.consumeBoolean()); - Mockito.when(clientModel.isFullScopeAllowed()).thenReturn(data.consumeBoolean()); - - Map map = new HashMap(); - map.put(data.consumeString(data.remainingBytes() / 2), - data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientModel.getAttributes()).thenReturn(map); - Mockito.when(clientModel.getAuthenticationFlowBindingOverrides()).thenReturn(map); - } + private void randomizeClientModel(FuzzedDataProvider data) { + // Randomize mock fields of Client Model instance + Mockito.when(clientModel.getId()).thenReturn(data.consumeString(data.remainingBytes() / 2)); + Mockito.when(clientModel.getClientId()) + .thenReturn(data.consumeString(data.remainingBytes() / 2)); + Mockito.when(clientModel.getName()).thenReturn(data.consumeString(data.remainingBytes() / 2)); + Mockito.when(clientModel.validateSecret(Mockito.any(String.class))) + .thenReturn(data.consumeBoolean()); + Mockito.when(clientModel.getSecret()) + .thenReturn(data.consumeString(data.remainingBytes() / 2)); + } - private static void randomizeHttpHeaders(FuzzedDataProvider data) { - // Randomize mock fields of Http Headers instance - MultivaluedMap map = new MultivaluedHashMap(); - map.add("Origin", "Origin" + data.consumeString(data.remainingBytes() / 2)); + private void randomizeHttpHeaders(FuzzedDataProvider data) { + // Randomize mock fields of Http Headers instance + MultivaluedMap map = new MultivaluedHashMap(); + map.add("Origin", "Origin" + data.consumeString(data.remainingBytes() / 2)); - Mockito.when(headers.getRequestHeaders()).thenReturn(map); - } + Mockito.when(headers.getRequestHeaders()).thenReturn(map); + } - private static void randomizeClientConnection(FuzzedDataProvider data) { - // Randomize mock fields of Client Connection instance - Mockito.when(clientConnection.getRemoteAddr()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientConnection.getRemoteHost()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientConnection.getLocalAddr()) - .thenReturn(data.consumeString(data.remainingBytes() / 2)); - Mockito.when(clientConnection.getRemotePort()).thenReturn(data.consumeInt(1, 65536)); - Mockito.when(clientConnection.getLocalPort()).thenReturn(data.consumeInt(1, 65536)); - } + private void randomizeClientConnection(FuzzedDataProvider data) { + // Randomize mock fields of Client Connection instance + Mockito.when(clientConnection.getRemoteAddr()) + .thenReturn(data.consumeString(data.remainingBytes() / 2)); + Mockito.when(clientConnection.getRemoteHost()) + .thenReturn(data.consumeString(data.remainingBytes() / 2)); + Mockito.when(clientConnection.getLocalAddr()) + .thenReturn(data.consumeString(data.remainingBytes() / 2)); + Mockito.when(clientConnection.getRemotePort()).thenReturn(data.consumeInt(1, 65536)); + Mockito.when(clientConnection.getLocalPort()).thenReturn(data.consumeInt(1, 65536)); + } - private static void randomizeKeycloakUriInfo(FuzzedDataProvider data) { - // Randomize mock fields of Keycloak Uri Info instance - MultivaluedMap map = new MultivaluedHashMap(); - map.add(data.consumeString(data.remainingBytes() / 2), - data.consumeString(data.remainingBytes() / 2)); - Mockito.when(uriInfo.getQueryParameters()).thenReturn(map); - } + private void randomizeKeycloakUriInfo(FuzzedDataProvider data) { + // Randomize mock fields of Keycloak Uri Info instance + MultivaluedMap map = new MultivaluedHashMap(); + map.add(data.consumeString(data.remainingBytes() / 2), + data.consumeString(data.remainingBytes() / 2)); + Mockito.when(uriInfo.getQueryParameters()).thenReturn(map); + } - private static void randomizeKeycloakSession(FuzzedDataProvider data) { - // Randomize mock fields of Keycloak Session instance + private void randomizeKeycloakSession(FuzzedDataProvider data) { + // Randomize mock fields of Keycloak Session instance - // Create and mock TransactionManager - KeycloakTransactionManager transactionManager = Mockito.mock(KeycloakTransactionManager.class); - Mockito.when(transactionManager.getJTAPolicy()) - .thenReturn(data.pickValue(EnumSet.allOf(KeycloakTransactionManager.JTAPolicy.class))); + // Create and mock TransactionManager + KeycloakTransactionManager transactionManager = + Mockito.mock(KeycloakTransactionManager.class); + Mockito.when(transactionManager.getJTAPolicy()) + .thenReturn(data.pickValue(EnumSet.allOf(KeycloakTransactionManager.JTAPolicy.class))); - // Create mock return for KeycloakSession instance - Mockito.when(session.getTransactionManager()).thenReturn(transactionManager); - } + // Create mock return for KeycloakSession instance + Mockito.when(session.getTransactionManager()).thenReturn(transactionManager); + } - private static AuthorizationTokenService.KeycloakAuthorizationRequest - createKeycloakAuthorizationRequest(FuzzedDataProvider data) { - // Create AuthorizationProvider instance - AuthorizationProvider authorizationProvider = - new DefaultAuthorizationProviderFactory().create(session); + private AuthorizationTokenService.KeycloakAuthorizationRequest + createKeycloakAuthorizationRequest(FuzzedDataProvider data) { + // Create AuthorizationProvider instance + AuthorizationProvider authorizationProvider = + new DefaultAuthorizationProviderFactory().create(session); - // Create EventBuilder instance - EventBuilder eventBuilder = new EventBuilder(realmModel, session, clientConnection); - eventBuilder.event(data.pickValue(EnumSet.allOf(EventType.class))); + // Create EventBuilder instance + EventBuilder eventBuilder = new EventBuilder(realmModel, session, clientConnection); + eventBuilder.event(data.pickValue(EnumSet.allOf(EventType.class))); - // Prepare HttpRequest instance with the mocked object - HttpRequest httpRequest = Mockito.mock(HttpRequest.class); - Mockito.doReturn(headers).when(httpRequest).getHttpHeaders(); + // Prepare HttpRequest instance with the mocked object + HttpRequest httpRequest = Mockito.mock(HttpRequest.class); + Mockito.doReturn(headers).when(httpRequest).getHttpHeaders(); - // Create Cors instance - Cors cors = new Cors(httpRequest); + // Create Cors instance + Cors cors = new Cors(httpRequest); - // Create TokenManager instance - TokenManager tokenManager = new TokenManager(); + // Create TokenManager instance + TokenManager tokenManager = new TokenManager(); - return new AuthorizationTokenService.KeycloakAuthorizationRequest( - authorizationProvider, tokenManager, eventBuilder, httpRequest, cors, clientConnection); + return new AuthorizationTokenService.KeycloakAuthorizationRequest( + authorizationProvider, tokenManager, eventBuilder, httpRequest, cors, clientConnection); + } } } diff --git a/projects/keycloak/build.sh b/projects/keycloak/build.sh index 51e4ad7c..56ae7508 100755 --- a/projects/keycloak/build.sh +++ b/projects/keycloak/build.sh @@ -105,7 +105,7 @@ RUNTIME_CLASSPATH=$RUNTIME_CLASSPATH:\$this_dir for fuzzer in $(find $SRC -name '*Fuzzer.java'); do fuzzer_basename=$(basename -s .java $fuzzer) $JAVA_HOME/bin/javac -cp $BUILD_CLASSPATH -d $SRC/ $fuzzer - cp $SRC/$fuzzer_basename.class $OUT/ + cp $SRC/$fuzzer_basename.class* $OUT/ # Create an execution wrapper that executes Jazzer with the correct arguments. From 5a7944cc842eb7c839ec05b6eb6ef5d880d55f8a Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Fri, 11 Aug 2023 18:09:54 +0000 Subject: [PATCH 2/3] Fix mock object cleanup Signed-off-by: Arthur Chan --- .../AuthorizationTokenServiceFuzzer.java | 27 ++++++++++--------- projects/keycloak/ServicesJwsFuzzer.java | 23 +++++++++++----- .../keycloak/ServicesValidationFuzzer.java | 19 +++++++++---- 3 files changed, 45 insertions(+), 24 deletions(-) diff --git a/projects/keycloak/AuthorizationTokenServiceFuzzer.java b/projects/keycloak/AuthorizationTokenServiceFuzzer.java index 3b40422a..a0c3963b 100644 --- a/projects/keycloak/AuthorizationTokenServiceFuzzer.java +++ b/projects/keycloak/AuthorizationTokenServiceFuzzer.java @@ -52,18 +52,12 @@ * class in the services authorization package. */ public class AuthorizationTokenServiceFuzzer { - private static RealmModel realmModel; - private static ClientModel clientModel; - private static HttpHeaders headers; - private static ClientConnection clientConnection; - private static KeycloakUriInfo uriInfo; - private static KeycloakContext context; - private static KeycloakSession session; + private static MockObject mockObject; public static void fuzzerTestOneInput(FuzzedDataProvider data) { try { // Create mock object - MockObject mockObject = new MockObject(); + mockObject = new MockObject(); // Create and randomize mock fields of mocked object instance mockObject.mockInstance(); @@ -78,11 +72,7 @@ public static void fuzzerTestOneInput(FuzzedDataProvider data) { } catch (CorsErrorResponseException e) { // Known exception } finally { - // Clean up inline mocks of the mock objects - Mockito.framework().clearInlineMocks(); - - // Suggest the java garbage collector to clean up unused memory - System.gc(); + cleanUpStaticMockObject(); } } @@ -268,4 +258,15 @@ private void randomizeKeycloakSession(FuzzedDataProvider data) { authorizationProvider, tokenManager, eventBuilder, httpRequest, cors, clientConnection); } } + + private static void cleanUpStaticMockObject() { + // Deference static mock object instance + mockObject = null; + + // Clean up inline mocks of the mock objects + Mockito.framework().clearInlineMocks(); + + // Suggest the java garbage collector to clean up unused memory + System.gc(); + } } diff --git a/projects/keycloak/ServicesJwsFuzzer.java b/projects/keycloak/ServicesJwsFuzzer.java index c5247acb..68a49e61 100644 --- a/projects/keycloak/ServicesJwsFuzzer.java +++ b/projects/keycloak/ServicesJwsFuzzer.java @@ -57,12 +57,9 @@ public class ServicesJwsFuzzer { private static DefaultTokenManager manager; private static Token token; - public static void fuzzerInitialize() { - mockObjectInstance(); - } - public static void fuzzerTestOneInput(FuzzedDataProvider data) { try { + mockObjectInstance(); randomizeObjectInstance(data); // Randomly execute one of the method in DefaultTokenManager @@ -126,8 +123,7 @@ public static void fuzzerTestOneInput(FuzzedDataProvider data) { } catch (RuntimeException e) { // Known exception } finally { - // Suggest the java garbage collector to clean up unused memory - System.gc(); + cleanUpStaticMockObject(); } } @@ -279,4 +275,19 @@ private static void randomizeToken(FuzzedDataProvider data) { Mockito.when(token.getCategory()) .thenReturn(data.pickValue(EnumSet.allOf(TokenCategory.class))); } + + private static void cleanUpStaticMockObject() { + // Deference the static object instance + clientModel = null; + realmModel = null; + session = null; + manager = null; + token = null; + + // Clean up inline mocks of the mock objects + Mockito.framework().clearInlineMocks(); + + // Suggest the java garbage collector to clean up unused memory + System.gc(); + } } diff --git a/projects/keycloak/ServicesValidationFuzzer.java b/projects/keycloak/ServicesValidationFuzzer.java index ab053fa6..a752426b 100644 --- a/projects/keycloak/ServicesValidationFuzzer.java +++ b/projects/keycloak/ServicesValidationFuzzer.java @@ -43,13 +43,12 @@ public static void fuzzerInitialize() { // Initialize the main validation provider instance validationProvider = new DefaultClientValidationProviderFactory().create(session); - - // Create and mock a random client model for validation - model = Mockito.mock(ClientModel.class); } public static void fuzzerTestOneInput(FuzzedDataProvider data) { try { + // Create and mock a random client model for validation + model = Mockito.mock(ClientModel.class); randomizeClientModel(data); // Create a client validation context object from the random client model @@ -70,8 +69,7 @@ public static void fuzzerTestOneInput(FuzzedDataProvider data) { throw e; } } finally { - // Suggest the java garbage collector to clean up unused memory - System.gc(); + cleanUpStaticMockObject(); } } @@ -112,4 +110,15 @@ private static void randomizeClientModel(FuzzedDataProvider data) { Mockito.when(model.getAttributes()).thenReturn(map); Mockito.when(model.getAuthenticationFlowBindingOverrides()).thenReturn(map); } + + private static void cleanUpStaticMockObject() { + // Deference the static object instance + model = null; + + // Clean up inline mocks of the mock objects + Mockito.framework().clearInlineMocks(); + + // Suggest the java garbage collector to clean up unused memory + System.gc(); + } } From 22de22129ef2a016be1ba5333360ae93961cc085 Mon Sep 17 00:00:00 2001 From: Arthur Chan Date: Fri, 11 Aug 2023 18:11:18 +0000 Subject: [PATCH 3/3] Fix formatting Signed-off-by: Arthur Chan --- projects/keycloak/JweAlgorithmProviderFuzzer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/keycloak/JweAlgorithmProviderFuzzer.java b/projects/keycloak/JweAlgorithmProviderFuzzer.java index 535fe980..96ac4593 100644 --- a/projects/keycloak/JweAlgorithmProviderFuzzer.java +++ b/projects/keycloak/JweAlgorithmProviderFuzzer.java @@ -14,14 +14,14 @@ // /////////////////////////////////////////////////////////////////////////// import com.code_intelligence.jazzer.api.FuzzedDataProvider; +import java.security.GeneralSecurityException; import java.security.Key; import java.security.KeyPair; import java.security.KeyPairGenerator; -import java.security.GeneralSecurityException; import java.security.NoSuchAlgorithmException; import javax.crypto.KeyGenerator; -import org.bouncycastle.crypto.fips.FipsRSA; import org.bouncycastle.crypto.CryptoException; +import org.bouncycastle.crypto.fips.FipsRSA; import org.keycloak.crypto.def.AesKeyWrapAlgorithmProvider; import org.keycloak.crypto.def.DefaultRsaKeyEncryption256JWEAlgorithmProvider; import org.keycloak.crypto.elytron.ElytronRsaKeyEncryption256JWEAlgorithmProvider;