aboutsummaryrefslogtreecommitdiff
path: root/src/share/native/sun
diff options
context:
space:
mode:
authorigerasim <none@none>2014-05-31 01:07:43 +0400
committerigerasim <none@none>2014-05-31 01:07:43 +0400
commitc8d7b21429a1ca85bac51ff029815fea9d58f2e6 (patch)
tree83faaa00479f953fb6031aa968d6f10d504f30e6 /src/share/native/sun
parent5fee57998108e7fbb140dc34a155ed18fb8d1df2 (diff)
8043720: (smartcardio) Native memory should be handled more accurately
Reviewed-by: valeriep
Diffstat (limited to 'src/share/native/sun')
-rw-r--r--src/share/native/sun/security/smartcardio/pcsc.c40
1 files changed, 24 insertions, 16 deletions
diff --git a/src/share/native/sun/security/smartcardio/pcsc.c b/src/share/native/sun/security/smartcardio/pcsc.c
index ab30e1381..b83723476 100644
--- a/src/share/native/sun/security/smartcardio/pcsc.c
+++ b/src/share/native/sun/security/smartcardio/pcsc.c
@@ -125,7 +125,7 @@ JNIEXPORT jlong JNICALL Java_sun_security_smartcardio_PCSC_SCardEstablishContext
jobjectArray pcsc_multi2jstring(JNIEnv *env, char *spec) {
jobjectArray result;
jclass stringClass;
- char *cp, **tab;
+ char *cp, **tab = NULL;
jstring js;
int cnt = 0;
@@ -179,7 +179,7 @@ JNIEXPORT jobjectArray JNICALL Java_sun_security_smartcardio_PCSC_SCardListReade
{
SCARDCONTEXT context = (SCARDCONTEXT)jContext;
LONG rv;
- LPTSTR mszReaders;
+ LPTSTR mszReaders = NULL;
DWORD size = 0;
jobjectArray result;
@@ -190,18 +190,20 @@ JNIEXPORT jobjectArray JNICALL Java_sun_security_smartcardio_PCSC_SCardListReade
}
dprintf1("-size: %d\n", size);
- mszReaders = malloc(size);
- if (mszReaders == NULL) {
- throwOutOfMemoryError(env, NULL);
- return NULL;
- }
+ if (size) {
+ mszReaders = malloc(size);
+ if (mszReaders == NULL) {
+ throwOutOfMemoryError(env, NULL);
+ return NULL;
+ }
- rv = CALL_SCardListReaders(context, NULL, mszReaders, &size);
- if (handleRV(env, rv)) {
- free(mszReaders);
- return NULL;
+ rv = CALL_SCardListReaders(context, NULL, mszReaders, &size);
+ if (handleRV(env, rv)) {
+ free(mszReaders);
+ return NULL;
+ }
+ dprintf1("-String: %s\n", mszReaders);
}
- dprintf1("-String: %s\n", mszReaders);
result = pcsc_multi2jstring(env, mszReaders);
free(mszReaders);
@@ -336,7 +338,7 @@ JNIEXPORT jintArray JNICALL Java_sun_security_smartcardio_PCSC_SCardGetStatusCha
const char *readerName;
readerState = calloc(readers, sizeof(SCARD_READERSTATE));
- if (readerState == NULL) {
+ if (readerState == NULL && readers > 0) {
throwOutOfMemoryError(env, NULL);
return NULL;
}
@@ -348,6 +350,10 @@ JNIEXPORT jintArray JNICALL Java_sun_security_smartcardio_PCSC_SCardGetStatusCha
}
for (i = 0; i < readers; i++) {
+ readerState[i].szReader = NULL;
+ }
+
+ for (i = 0; i < readers; i++) {
jobject jReaderName = (*env)->GetObjectArrayElement(env, jReaderNames, i);
if ((*env)->ExceptionCheck(env)) {
goto cleanup;
@@ -369,9 +375,11 @@ JNIEXPORT jintArray JNICALL Java_sun_security_smartcardio_PCSC_SCardGetStatusCha
(*env)->DeleteLocalRef(env, jReaderName);
}
- rv = CALL_SCardGetStatusChange(context, (DWORD)jTimeout, readerState, readers);
- if (handleRV(env, rv)) {
- goto cleanup;
+ if (readers > 0) {
+ rv = CALL_SCardGetStatusChange(context, (DWORD)jTimeout, readerState, readers);
+ if (handleRV(env, rv)) {
+ goto cleanup;
+ }
}
jEventState = (*env)->NewIntArray(env, readers);