--- a/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_dual.c Mon Mar 02 15:10:55 2009 -0800
+++ b/jdk/src/share/native/sun/security/pkcs11/wrapper/p11_dual.c Tue Mar 03 19:50:59 2009 -0800
@@ -1,5 +1,5 @@
/*
- * Portions Copyright 2003-2007 Sun Microsystems, Inc. All Rights Reserved.
+ * Portions Copyright 2003-2009 Sun Microsystems, Inc. All Rights Reserved.
*/
/* Copyright (c) 2002 Graz University of Technology. All rights reserved.
@@ -73,7 +73,7 @@
CK_SESSION_HANDLE ckSessionHandle;
CK_BYTE_PTR ckpPart = NULL_PTR, ckpEncryptedPart;
CK_ULONG ckPartLength, ckEncryptedPartLength = 0;
- jbyteArray jEncryptedPart;
+ jbyteArray jEncryptedPart = NULL;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -81,20 +81,28 @@
ckSessionHandle = jLongToCKULong(jSessionHandle);
jByteArrayToCKByteArray(env, jPart, &ckpPart, &ckPartLength);
+ if ((*env)->ExceptionCheck(env)) { return NULL; }
rv = (*ckpFunctions->C_DigestEncryptUpdate)(ckSessionHandle, ckpPart, ckPartLength, NULL_PTR, &ckEncryptedPartLength);
- if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
+ if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
+ free(ckpPart);
+ return NULL;
+ }
ckpEncryptedPart = (CK_BYTE_PTR) malloc(ckEncryptedPartLength * sizeof(CK_BYTE));
+ if (ckpEncryptedPart == NULL) {
+ free(ckpPart);
+ JNU_ThrowOutOfMemoryError(env, 0);
+ return NULL;
+ }
rv = (*ckpFunctions->C_DigestEncryptUpdate)(ckSessionHandle, ckpPart, ckPartLength, ckpEncryptedPart, &ckEncryptedPartLength);
-
- jEncryptedPart = ckByteArrayToJByteArray(env, ckpEncryptedPart, ckEncryptedPartLength);
+ if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
+ jEncryptedPart = ckByteArrayToJByteArray(env, ckpEncryptedPart, ckEncryptedPartLength);
+ }
free(ckpPart);
free(ckpEncryptedPart);
- if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
-
return jEncryptedPart ;
}
#endif
@@ -117,7 +125,7 @@
CK_SESSION_HANDLE ckSessionHandle;
CK_BYTE_PTR ckpPart, ckpEncryptedPart = NULL_PTR;
CK_ULONG ckPartLength = 0, ckEncryptedPartLength;
- jbyteArray jPart;
+ jbyteArray jPart = NULL;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -125,19 +133,27 @@
ckSessionHandle = jLongToCKULong(jSessionHandle);
jByteArrayToCKByteArray(env, jEncryptedPart, &ckpEncryptedPart, &ckEncryptedPartLength);
+ if ((*env)->ExceptionCheck(env)) { return NULL; }
rv = (*ckpFunctions->C_DecryptDigestUpdate)(ckSessionHandle, ckpEncryptedPart, ckEncryptedPartLength, NULL_PTR, &ckPartLength);
- if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL; }
+ if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
+ free(ckpEncryptedPart);
+ return NULL;
+ }
ckpPart = (CK_BYTE_PTR) malloc(ckPartLength * sizeof(CK_BYTE));
+ if (ckpPart == NULL) {
+ free(ckpEncryptedPart);
+ JNU_ThrowOutOfMemoryError(env, 0);
+ return NULL;
+ }
rv = (*ckpFunctions->C_DecryptDigestUpdate)(ckSessionHandle, ckpEncryptedPart, ckEncryptedPartLength, ckpPart, &ckPartLength);
-
- jPart = ckByteArrayToJByteArray(env, ckpPart, ckPartLength);
+ if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
+ jPart = ckByteArrayToJByteArray(env, ckpPart, ckPartLength);
+ }
+ free(ckpEncryptedPart);
free(ckpPart);
- free(ckpEncryptedPart);
-
- if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
return jPart ;
}
@@ -161,7 +177,7 @@
CK_SESSION_HANDLE ckSessionHandle;
CK_BYTE_PTR ckpPart = NULL_PTR, ckpEncryptedPart;
CK_ULONG ckPartLength, ckEncryptedPartLength = 0;
- jbyteArray jEncryptedPart;
+ jbyteArray jEncryptedPart = NULL;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -169,20 +185,28 @@
ckSessionHandle = jLongToCKULong(jSessionHandle);
jByteArrayToCKByteArray(env, jPart, &ckpPart, &ckPartLength);
+ if ((*env)->ExceptionCheck(env)) { return NULL; }
rv = (*ckpFunctions->C_SignEncryptUpdate)(ckSessionHandle, ckpPart, ckPartLength, NULL_PTR, &ckEncryptedPartLength);
- if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
+ if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
+ free(ckpPart);
+ return NULL;
+ }
ckpEncryptedPart = (CK_BYTE_PTR) malloc(ckEncryptedPartLength * sizeof(CK_BYTE));
+ if (ckpEncryptedPart == NULL) {
+ free(ckpPart);
+ JNU_ThrowOutOfMemoryError(env, 0);
+ return NULL;
+ }
rv = (*ckpFunctions->C_SignEncryptUpdate)(ckSessionHandle, ckpPart, ckPartLength, ckpEncryptedPart, &ckEncryptedPartLength);
-
- jEncryptedPart = ckByteArrayToJByteArray(env, ckpEncryptedPart, ckEncryptedPartLength);
+ if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
+ jEncryptedPart = ckByteArrayToJByteArray(env, ckpEncryptedPart, ckEncryptedPartLength);
+ }
free(ckpPart);
free(ckpEncryptedPart);
- if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
-
return jEncryptedPart ;
}
#endif
@@ -205,7 +229,7 @@
CK_SESSION_HANDLE ckSessionHandle;
CK_BYTE_PTR ckpPart, ckpEncryptedPart = NULL_PTR;
CK_ULONG ckPartLength = 0, ckEncryptedPartLength;
- jbyteArray jPart;
+ jbyteArray jPart = NULL;
CK_RV rv;
CK_FUNCTION_LIST_PTR ckpFunctions = getFunctionList(env, obj);
@@ -213,19 +237,28 @@
ckSessionHandle = jLongToCKULong(jSessionHandle);
jByteArrayToCKByteArray(env, jEncryptedPart, &ckpEncryptedPart, &ckEncryptedPartLength);
+ if ((*env)->ExceptionCheck(env)) { return NULL; }
rv = (*ckpFunctions->C_DecryptVerifyUpdate)(ckSessionHandle, ckpEncryptedPart, ckEncryptedPartLength, NULL_PTR, &ckPartLength);
- if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
+ if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) {
+ free(ckpEncryptedPart);
+ return NULL;
+ }
ckpPart = (CK_BYTE_PTR) malloc(ckPartLength * sizeof(CK_BYTE));
+ if (ckpPart == NULL) {
+ free(ckpEncryptedPart);
+ JNU_ThrowOutOfMemoryError(env, 0);
+ return NULL;
+ }
rv = (*ckpFunctions->C_DecryptVerifyUpdate)(ckSessionHandle, ckpEncryptedPart, ckEncryptedPartLength, ckpPart, &ckPartLength);
- jPart = ckByteArrayToJByteArray(env, ckpPart, ckPartLength);
- free(ckpPart);
+ if (ckAssertReturnValueOK(env, rv) == CK_ASSERT_OK) {
+ jPart = ckByteArrayToJByteArray(env, ckpPart, ckPartLength);
+ }
free(ckpEncryptedPart);
-
- if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return NULL ; }
+ free(ckpPart);
return jPart ;
}
@@ -252,7 +285,7 @@
/* C_GetFunctionStatus should always return CKR_FUNCTION_NOT_PARALLEL */
rv = (*ckpFunctions->C_GetFunctionStatus)(ckSessionHandle);
- if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
+ if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
}
#endif
@@ -277,6 +310,6 @@
/* C_GetFunctionStatus should always return CKR_FUNCTION_NOT_PARALLEL */
rv = (*ckpFunctions->C_CancelFunction)(ckSessionHandle);
- if(ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
+ if (ckAssertReturnValueOK(env, rv) != CK_ASSERT_OK) { return; }
}
#endif