jdk/src/share/native/sun/security/pkcs11/wrapper/p11_util.c
changeset 10798 413b731e1818
parent 5506 202f599c92aa
child 14342 8435a30053c1
equal deleted inserted replaced
10797:f51518b30c84 10798:413b731e1818
   211         (*env)->DeleteLocalRef(env, jPKCS11ExceptionClass);
   211         (*env)->DeleteLocalRef(env, jPKCS11ExceptionClass);
   212     }
   212     }
   213     return jErrorCode ;
   213     return jErrorCode ;
   214 }
   214 }
   215 
   215 
   216 /*
   216 
   217  * This function simply throws an IOException
   217 /*
   218  *
   218  * Throws a Java Exception by name
   219  * @param env Used to call JNI funktions and to get the Exception class.
   219  */
   220  * @param message The message string of the Exception object.
   220 void throwByName(JNIEnv *env, const char *name, const char *msg)
   221  */
   221 {
   222 void throwIOException(JNIEnv *env, const char *message)
   222     jclass cls = (*env)->FindClass(env, name);
   223 {
   223 
   224     JNU_ThrowByName(env, CLASS_IO_EXCEPTION, message);
   224     if (cls != 0) /* Otherwise an exception has already been thrown */
       
   225         (*env)->ThrowNew(env, cls, msg);
       
   226 }
       
   227 
       
   228 /*
       
   229  * Throws java.lang.OutOfMemoryError
       
   230  */
       
   231 void throwOutOfMemoryError(JNIEnv *env, const char *msg)
       
   232 {
       
   233     throwByName(env, "java/lang/OutOfMemoryError", msg);
       
   234 }
       
   235 
       
   236 /*
       
   237  * Throws java.lang.NullPointerException
       
   238  */
       
   239 void throwNullPointerException(JNIEnv *env, const char *msg)
       
   240 {
       
   241     throwByName(env, "java/lang/NullPointerException", msg);
       
   242 }
       
   243 
       
   244 /*
       
   245  * Throws java.io.IOException
       
   246  */
       
   247 void throwIOException(JNIEnv *env, const char *msg)
       
   248 {
       
   249     throwByName(env, "java/io/IOException", msg);
   225 }
   250 }
   226 
   251 
   227 /*
   252 /*
   228  * This function simply throws a PKCS#11RuntimeException with the given
   253  * This function simply throws a PKCS#11RuntimeException with the given
   229  * string as its message. If the message is NULL, the exception is created
   254  * string as its message.
   230  * using the default constructor.
       
   231  *
   255  *
   232  * @param env Used to call JNI funktions and to get the Exception class.
   256  * @param env Used to call JNI funktions and to get the Exception class.
   233  * @param jmessage The message string of the Exception object.
   257  * @param jmessage The message string of the Exception object.
   234  */
   258  */
   235 void throwPKCS11RuntimeException(JNIEnv *env, const char *message)
   259 void throwPKCS11RuntimeException(JNIEnv *env, const char *message)
   236 {
   260 {
   237     JNU_ThrowByName(env, CLASS_PKCS11RUNTIMEEXCEPTION, message);
   261     throwByName(env, CLASS_PKCS11RUNTIMEEXCEPTION, message);
   238 }
   262 }
   239 
   263 
   240 /*
   264 /*
   241  * This function simply throws a PKCS#11RuntimeException. The message says that
   265  * This function simply throws a PKCS#11RuntimeException. The message says that
   242  * the object is not connected to the module.
   266  * the object is not connected to the module.
   316         return;
   340         return;
   317     }
   341     }
   318     *ckpLength = (*env)->GetArrayLength(env, jArray);
   342     *ckpLength = (*env)->GetArrayLength(env, jArray);
   319     jpTemp = (jboolean*) malloc((*ckpLength) * sizeof(jboolean));
   343     jpTemp = (jboolean*) malloc((*ckpLength) * sizeof(jboolean));
   320     if (jpTemp == NULL) {
   344     if (jpTemp == NULL) {
   321         JNU_ThrowOutOfMemoryError(env, 0);
   345         throwOutOfMemoryError(env, 0);
   322         return;
   346         return;
   323     }
   347     }
   324     (*env)->GetBooleanArrayRegion(env, jArray, 0, *ckpLength, jpTemp);
   348     (*env)->GetBooleanArrayRegion(env, jArray, 0, *ckpLength, jpTemp);
   325     if ((*env)->ExceptionCheck(env)) {
   349     if ((*env)->ExceptionCheck(env)) {
   326         free(jpTemp);
   350         free(jpTemp);
   328     }
   352     }
   329 
   353 
   330     *ckpArray = (CK_BBOOL*) malloc ((*ckpLength) * sizeof(CK_BBOOL));
   354     *ckpArray = (CK_BBOOL*) malloc ((*ckpLength) * sizeof(CK_BBOOL));
   331     if (*ckpArray == NULL) {
   355     if (*ckpArray == NULL) {
   332         free(jpTemp);
   356         free(jpTemp);
   333         JNU_ThrowOutOfMemoryError(env, 0);
   357         throwOutOfMemoryError(env, 0);
   334         return;
   358         return;
   335     }
   359     }
   336     for (i=0; i<(*ckpLength); i++) {
   360     for (i=0; i<(*ckpLength); i++) {
   337         (*ckpArray)[i] = jBooleanToCKBBool(jpTemp[i]);
   361         (*ckpArray)[i] = jBooleanToCKBBool(jpTemp[i]);
   338     }
   362     }
   358         return;
   382         return;
   359     }
   383     }
   360     *ckpLength = (*env)->GetArrayLength(env, jArray);
   384     *ckpLength = (*env)->GetArrayLength(env, jArray);
   361     jpTemp = (jbyte*) malloc((*ckpLength) * sizeof(jbyte));
   385     jpTemp = (jbyte*) malloc((*ckpLength) * sizeof(jbyte));
   362     if (jpTemp == NULL) {
   386     if (jpTemp == NULL) {
   363         JNU_ThrowOutOfMemoryError(env, 0);
   387         throwOutOfMemoryError(env, 0);
   364         return;
   388         return;
   365     }
   389     }
   366     (*env)->GetByteArrayRegion(env, jArray, 0, *ckpLength, jpTemp);
   390     (*env)->GetByteArrayRegion(env, jArray, 0, *ckpLength, jpTemp);
   367     if ((*env)->ExceptionCheck(env)) {
   391     if ((*env)->ExceptionCheck(env)) {
   368         free(jpTemp);
   392         free(jpTemp);
   374         *ckpArray = (CK_BYTE_PTR) jpTemp;
   398         *ckpArray = (CK_BYTE_PTR) jpTemp;
   375     } else {
   399     } else {
   376         *ckpArray = (CK_BYTE_PTR) malloc ((*ckpLength) * sizeof(CK_BYTE));
   400         *ckpArray = (CK_BYTE_PTR) malloc ((*ckpLength) * sizeof(CK_BYTE));
   377         if (*ckpArray == NULL) {
   401         if (*ckpArray == NULL) {
   378             free(jpTemp);
   402             free(jpTemp);
   379             JNU_ThrowOutOfMemoryError(env, 0);
   403             throwOutOfMemoryError(env, 0);
   380             return;
   404             return;
   381         }
   405         }
   382         for (i=0; i<(*ckpLength); i++) {
   406         for (i=0; i<(*ckpLength); i++) {
   383             (*ckpArray)[i] = jByteToCKByte(jpTemp[i]);
   407             (*ckpArray)[i] = jByteToCKByte(jpTemp[i]);
   384         }
   408         }
   405         return;
   429         return;
   406     }
   430     }
   407     *ckpLength = (*env)->GetArrayLength(env, jArray);
   431     *ckpLength = (*env)->GetArrayLength(env, jArray);
   408     jTemp = (jlong*) malloc((*ckpLength) * sizeof(jlong));
   432     jTemp = (jlong*) malloc((*ckpLength) * sizeof(jlong));
   409     if (jTemp == NULL) {
   433     if (jTemp == NULL) {
   410         JNU_ThrowOutOfMemoryError(env, 0);
   434         throwOutOfMemoryError(env, 0);
   411         return;
   435         return;
   412     }
   436     }
   413     (*env)->GetLongArrayRegion(env, jArray, 0, *ckpLength, jTemp);
   437     (*env)->GetLongArrayRegion(env, jArray, 0, *ckpLength, jTemp);
   414     if ((*env)->ExceptionCheck(env)) {
   438     if ((*env)->ExceptionCheck(env)) {
   415         free(jTemp);
   439         free(jTemp);
   417     }
   441     }
   418 
   442 
   419     *ckpArray = (CK_ULONG_PTR) malloc (*ckpLength * sizeof(CK_ULONG));
   443     *ckpArray = (CK_ULONG_PTR) malloc (*ckpLength * sizeof(CK_ULONG));
   420     if (*ckpArray == NULL) {
   444     if (*ckpArray == NULL) {
   421         free(jTemp);
   445         free(jTemp);
   422         JNU_ThrowOutOfMemoryError(env, 0);
   446         throwOutOfMemoryError(env, 0);
   423         return;
   447         return;
   424     }
   448     }
   425     for (i=0; i<(*ckpLength); i++) {
   449     for (i=0; i<(*ckpLength); i++) {
   426         (*ckpArray)[i] = jLongToCKULong(jTemp[i]);
   450         (*ckpArray)[i] = jLongToCKULong(jTemp[i]);
   427     }
   451     }
   447         return;
   471         return;
   448     }
   472     }
   449     *ckpLength = (*env)->GetArrayLength(env, jArray);
   473     *ckpLength = (*env)->GetArrayLength(env, jArray);
   450     jpTemp = (jchar*) malloc((*ckpLength) * sizeof(jchar));
   474     jpTemp = (jchar*) malloc((*ckpLength) * sizeof(jchar));
   451     if (jpTemp == NULL) {
   475     if (jpTemp == NULL) {
   452         JNU_ThrowOutOfMemoryError(env, 0);
   476         throwOutOfMemoryError(env, 0);
   453         return;
   477         return;
   454     }
   478     }
   455     (*env)->GetCharArrayRegion(env, jArray, 0, *ckpLength, jpTemp);
   479     (*env)->GetCharArrayRegion(env, jArray, 0, *ckpLength, jpTemp);
   456     if ((*env)->ExceptionCheck(env)) {
   480     if ((*env)->ExceptionCheck(env)) {
   457         free(jpTemp);
   481         free(jpTemp);
   459     }
   483     }
   460 
   484 
   461     *ckpArray = (CK_CHAR_PTR) malloc (*ckpLength * sizeof(CK_CHAR));
   485     *ckpArray = (CK_CHAR_PTR) malloc (*ckpLength * sizeof(CK_CHAR));
   462     if (*ckpArray == NULL) {
   486     if (*ckpArray == NULL) {
   463         free(jpTemp);
   487         free(jpTemp);
   464         JNU_ThrowOutOfMemoryError(env, 0);
   488         throwOutOfMemoryError(env, 0);
   465         return;
   489         return;
   466     }
   490     }
   467     for (i=0; i<(*ckpLength); i++) {
   491     for (i=0; i<(*ckpLength); i++) {
   468         (*ckpArray)[i] = jCharToCKChar(jpTemp[i]);
   492         (*ckpArray)[i] = jCharToCKChar(jpTemp[i]);
   469     }
   493     }
   489         return;
   513         return;
   490     }
   514     }
   491     *ckpLength = (*env)->GetArrayLength(env, jArray);
   515     *ckpLength = (*env)->GetArrayLength(env, jArray);
   492     jTemp = (jchar*) malloc((*ckpLength) * sizeof(jchar));
   516     jTemp = (jchar*) malloc((*ckpLength) * sizeof(jchar));
   493     if (jTemp == NULL) {
   517     if (jTemp == NULL) {
   494         JNU_ThrowOutOfMemoryError(env, 0);
   518         throwOutOfMemoryError(env, 0);
   495         return;
   519         return;
   496     }
   520     }
   497     (*env)->GetCharArrayRegion(env, jArray, 0, *ckpLength, jTemp);
   521     (*env)->GetCharArrayRegion(env, jArray, 0, *ckpLength, jTemp);
   498     if ((*env)->ExceptionCheck(env)) {
   522     if ((*env)->ExceptionCheck(env)) {
   499         free(jTemp);
   523         free(jTemp);
   501     }
   525     }
   502 
   526 
   503     *ckpArray = (CK_UTF8CHAR_PTR) malloc (*ckpLength * sizeof(CK_UTF8CHAR));
   527     *ckpArray = (CK_UTF8CHAR_PTR) malloc (*ckpLength * sizeof(CK_UTF8CHAR));
   504     if (*ckpArray == NULL) {
   528     if (*ckpArray == NULL) {
   505         free(jTemp);
   529         free(jTemp);
   506         JNU_ThrowOutOfMemoryError(env, 0);
   530         throwOutOfMemoryError(env, 0);
   507         return;
   531         return;
   508     }
   532     }
   509     for (i=0; i<(*ckpLength); i++) {
   533     for (i=0; i<(*ckpLength); i++) {
   510         (*ckpArray)[i] = jCharToCKUTF8Char(jTemp[i]);
   534         (*ckpArray)[i] = jCharToCKUTF8Char(jTemp[i]);
   511     }
   535     }
   536 
   560 
   537     *ckpLength = strlen(pCharArray);
   561     *ckpLength = strlen(pCharArray);
   538     *ckpArray = (CK_UTF8CHAR_PTR) malloc((*ckpLength + 1) * sizeof(CK_UTF8CHAR));
   562     *ckpArray = (CK_UTF8CHAR_PTR) malloc((*ckpLength + 1) * sizeof(CK_UTF8CHAR));
   539     if (*ckpArray == NULL) {
   563     if (*ckpArray == NULL) {
   540         (*env)->ReleaseStringUTFChars(env, (jstring) jArray, pCharArray);
   564         (*env)->ReleaseStringUTFChars(env, (jstring) jArray, pCharArray);
   541         JNU_ThrowOutOfMemoryError(env, 0);
   565         throwOutOfMemoryError(env, 0);
   542         return;
   566         return;
   543     }
   567     }
   544     strcpy((char*)*ckpArray, pCharArray);
   568     strcpy((char*)*ckpArray, pCharArray);
   545     (*env)->ReleaseStringUTFChars(env, (jstring) jArray, pCharArray);
   569     (*env)->ReleaseStringUTFChars(env, (jstring) jArray, pCharArray);
   546 }
   570 }
   569     }
   593     }
   570     jLength = (*env)->GetArrayLength(env, jArray);
   594     jLength = (*env)->GetArrayLength(env, jArray);
   571     *ckpLength = jLongToCKULong(jLength);
   595     *ckpLength = jLongToCKULong(jLength);
   572     *ckpArray = (CK_ATTRIBUTE_PTR) malloc(*ckpLength * sizeof(CK_ATTRIBUTE));
   596     *ckpArray = (CK_ATTRIBUTE_PTR) malloc(*ckpLength * sizeof(CK_ATTRIBUTE));
   573     if (*ckpArray == NULL) {
   597     if (*ckpArray == NULL) {
   574         JNU_ThrowOutOfMemoryError(env, 0);
   598         throwOutOfMemoryError(env, 0);
   575         return;
   599         return;
   576     }
   600     }
   577     TRACE1(", converting %d attibutes", jLength);
   601     TRACE1(", converting %d attibutes", jLength);
   578     for (i=0; i<(*ckpLength); i++) {
   602     for (i=0; i<(*ckpLength); i++) {
   579         TRACE1(", getting %d. attibute", i);
   603         TRACE1(", getting %d. attibute", i);
   611     if (sizeof(CK_BYTE) == sizeof(jbyte)) {
   635     if (sizeof(CK_BYTE) == sizeof(jbyte)) {
   612         jpTemp = (jbyte*) ckpArray;
   636         jpTemp = (jbyte*) ckpArray;
   613     } else {
   637     } else {
   614         jpTemp = (jbyte*) malloc((ckLength) * sizeof(jbyte));
   638         jpTemp = (jbyte*) malloc((ckLength) * sizeof(jbyte));
   615         if (jpTemp == NULL) {
   639         if (jpTemp == NULL) {
   616             JNU_ThrowOutOfMemoryError(env, 0);
   640             throwOutOfMemoryError(env, 0);
   617             return NULL;
   641             return NULL;
   618         }
   642         }
   619         for (i=0; i<ckLength; i++) {
   643         for (i=0; i<ckLength; i++) {
   620             jpTemp[i] = ckByteToJByte(ckpArray[i]);
   644             jpTemp[i] = ckByteToJByte(ckpArray[i]);
   621         }
   645         }
   645     jlong* jpTemp;
   669     jlong* jpTemp;
   646     jlongArray jArray;
   670     jlongArray jArray;
   647 
   671 
   648     jpTemp = (jlong*) malloc((ckLength) * sizeof(jlong));
   672     jpTemp = (jlong*) malloc((ckLength) * sizeof(jlong));
   649     if (jpTemp == NULL) {
   673     if (jpTemp == NULL) {
   650         JNU_ThrowOutOfMemoryError(env, 0);
   674         throwOutOfMemoryError(env, 0);
   651         return NULL;
   675         return NULL;
   652     }
   676     }
   653     for (i=0; i<ckLength; i++) {
   677     for (i=0; i<ckLength; i++) {
   654         jpTemp[i] = ckLongToJLong(ckpArray[i]);
   678         jpTemp[i] = ckLongToJLong(ckpArray[i]);
   655     }
   679     }
   676     jchar* jpTemp;
   700     jchar* jpTemp;
   677     jcharArray jArray;
   701     jcharArray jArray;
   678 
   702 
   679     jpTemp = (jchar*) malloc(ckLength * sizeof(jchar));
   703     jpTemp = (jchar*) malloc(ckLength * sizeof(jchar));
   680     if (jpTemp == NULL) {
   704     if (jpTemp == NULL) {
   681         JNU_ThrowOutOfMemoryError(env, 0);
   705         throwOutOfMemoryError(env, 0);
   682         return NULL;
   706         return NULL;
   683     }
   707     }
   684     for (i=0; i<ckLength; i++) {
   708     for (i=0; i<ckLength; i++) {
   685         jpTemp[i] = ckCharToJChar(ckpArray[i]);
   709         jpTemp[i] = ckCharToJChar(ckpArray[i]);
   686     }
   710     }
   707     jchar* jpTemp;
   731     jchar* jpTemp;
   708     jcharArray jArray;
   732     jcharArray jArray;
   709 
   733 
   710     jpTemp = (jchar*) malloc(ckLength * sizeof(jchar));
   734     jpTemp = (jchar*) malloc(ckLength * sizeof(jchar));
   711     if (jpTemp == NULL) {
   735     if (jpTemp == NULL) {
   712         JNU_ThrowOutOfMemoryError(env, 0);
   736         throwOutOfMemoryError(env, 0);
   713         return NULL;
   737         return NULL;
   714     }
   738     }
   715     for (i=0; i<ckLength; i++) {
   739     for (i=0; i<ckLength; i++) {
   716         jpTemp[i] = ckUTF8CharToJChar(ckpArray[i]);
   740         jpTemp[i] = ckUTF8CharToJChar(ckpArray[i]);
   717     }
   741     }
   810     jValueMethod = (*env)->GetMethodID(env, jObjectClass, "booleanValue", "()Z");
   834     jValueMethod = (*env)->GetMethodID(env, jObjectClass, "booleanValue", "()Z");
   811     if (jValueMethod == NULL) { return NULL; }
   835     if (jValueMethod == NULL) { return NULL; }
   812     jValue = (*env)->CallBooleanMethod(env, jObject, jValueMethod);
   836     jValue = (*env)->CallBooleanMethod(env, jObject, jValueMethod);
   813     ckpValue = (CK_BBOOL *) malloc(sizeof(CK_BBOOL));
   837     ckpValue = (CK_BBOOL *) malloc(sizeof(CK_BBOOL));
   814     if (ckpValue == NULL) {
   838     if (ckpValue == NULL) {
   815         JNU_ThrowOutOfMemoryError(env, 0);
   839         throwOutOfMemoryError(env, 0);
   816         return NULL;
   840         return NULL;
   817     }
   841     }
   818     *ckpValue = jBooleanToCKBBool(jValue);
   842     *ckpValue = jBooleanToCKBBool(jValue);
   819 
   843 
   820     return ckpValue ;
   844     return ckpValue ;
   840     jValueMethod = (*env)->GetMethodID(env, jObjectClass, "byteValue", "()B");
   864     jValueMethod = (*env)->GetMethodID(env, jObjectClass, "byteValue", "()B");
   841     if (jValueMethod == NULL) { return NULL; }
   865     if (jValueMethod == NULL) { return NULL; }
   842     jValue = (*env)->CallByteMethod(env, jObject, jValueMethod);
   866     jValue = (*env)->CallByteMethod(env, jObject, jValueMethod);
   843     ckpValue = (CK_BYTE_PTR) malloc(sizeof(CK_BYTE));
   867     ckpValue = (CK_BYTE_PTR) malloc(sizeof(CK_BYTE));
   844     if (ckpValue == NULL) {
   868     if (ckpValue == NULL) {
   845         JNU_ThrowOutOfMemoryError(env, 0);
   869         throwOutOfMemoryError(env, 0);
   846         return NULL;
   870         return NULL;
   847     }
   871     }
   848     *ckpValue = jByteToCKByte(jValue);
   872     *ckpValue = jByteToCKByte(jValue);
   849     return ckpValue ;
   873     return ckpValue ;
   850 }
   874 }
   869     jValueMethod = (*env)->GetMethodID(env, jObjectClass, "intValue", "()I");
   893     jValueMethod = (*env)->GetMethodID(env, jObjectClass, "intValue", "()I");
   870     if (jValueMethod == NULL) { return NULL; }
   894     if (jValueMethod == NULL) { return NULL; }
   871     jValue = (*env)->CallIntMethod(env, jObject, jValueMethod);
   895     jValue = (*env)->CallIntMethod(env, jObject, jValueMethod);
   872     ckpValue = (CK_ULONG *) malloc(sizeof(CK_ULONG));
   896     ckpValue = (CK_ULONG *) malloc(sizeof(CK_ULONG));
   873     if (ckpValue == NULL) {
   897     if (ckpValue == NULL) {
   874         JNU_ThrowOutOfMemoryError(env, 0);
   898         throwOutOfMemoryError(env, 0);
   875         return NULL;
   899         return NULL;
   876     }
   900     }
   877     *ckpValue = jLongToCKLong(jValue);
   901     *ckpValue = jLongToCKLong(jValue);
   878     return ckpValue ;
   902     return ckpValue ;
   879 }
   903 }
   898     jValueMethod = (*env)->GetMethodID(env, jObjectClass, "longValue", "()J");
   922     jValueMethod = (*env)->GetMethodID(env, jObjectClass, "longValue", "()J");
   899     if (jValueMethod == NULL) { return NULL; }
   923     if (jValueMethod == NULL) { return NULL; }
   900     jValue = (*env)->CallLongMethod(env, jObject, jValueMethod);
   924     jValue = (*env)->CallLongMethod(env, jObject, jValueMethod);
   901     ckpValue = (CK_ULONG *) malloc(sizeof(CK_ULONG));
   925     ckpValue = (CK_ULONG *) malloc(sizeof(CK_ULONG));
   902     if (ckpValue == NULL) {
   926     if (ckpValue == NULL) {
   903         JNU_ThrowOutOfMemoryError(env, 0);
   927         throwOutOfMemoryError(env, 0);
   904         return NULL;
   928         return NULL;
   905     }
   929     }
   906     *ckpValue = jLongToCKULong(jValue);
   930     *ckpValue = jLongToCKULong(jValue);
   907 
   931 
   908     return ckpValue ;
   932     return ckpValue ;
   928     jValueMethod = (*env)->GetMethodID(env, jObjectClass, "charValue", "()C");
   952     jValueMethod = (*env)->GetMethodID(env, jObjectClass, "charValue", "()C");
   929     if (jValueMethod == NULL) { return NULL; }
   953     if (jValueMethod == NULL) { return NULL; }
   930     jValue = (*env)->CallCharMethod(env, jObject, jValueMethod);
   954     jValue = (*env)->CallCharMethod(env, jObject, jValueMethod);
   931     ckpValue = (CK_CHAR_PTR) malloc(sizeof(CK_CHAR));
   955     ckpValue = (CK_CHAR_PTR) malloc(sizeof(CK_CHAR));
   932     if (ckpValue == NULL) {
   956     if (ckpValue == NULL) {
   933         JNU_ThrowOutOfMemoryError(env, 0);
   957         throwOutOfMemoryError(env, 0);
   934         return NULL;
   958         return NULL;
   935     }
   959     }
   936     *ckpValue = jCharToCKChar(jValue);
   960     *ckpValue = jCharToCKChar(jValue);
   937 
   961 
   938     return ckpValue ;
   962     return ckpValue ;
  1085     exceptionMsgPrefix = "Java object of this class cannot be converted to native PKCS#11 type: ";
  1109     exceptionMsgPrefix = "Java object of this class cannot be converted to native PKCS#11 type: ";
  1086     exceptionMsg = (char *)
  1110     exceptionMsg = (char *)
  1087         malloc((strlen(exceptionMsgPrefix) + strlen(classNameString) + 1));
  1111         malloc((strlen(exceptionMsgPrefix) + strlen(classNameString) + 1));
  1088     if (exceptionMsg == NULL) {
  1112     if (exceptionMsg == NULL) {
  1089         (*env)->ReleaseStringUTFChars(env, jClassNameString, classNameString);
  1113         (*env)->ReleaseStringUTFChars(env, jClassNameString, classNameString);
  1090         JNU_ThrowOutOfMemoryError(env, 0);
  1114         throwOutOfMemoryError(env, 0);
  1091         return;
  1115         return;
  1092     }
  1116     }
  1093     strcpy(exceptionMsg, exceptionMsgPrefix);
  1117     strcpy(exceptionMsg, exceptionMsgPrefix);
  1094     strcat(exceptionMsg, classNameString);
  1118     strcat(exceptionMsg, classNameString);
  1095     (*env)->ReleaseStringUTFChars(env, jClassNameString, classNameString);
  1119     (*env)->ReleaseStringUTFChars(env, jClassNameString, classNameString);