--- old/src/java.base/share/native/libzip/ZipFile.c 2015-09-15 17:06:51.193584437 +0200 +++ new/src/java.base/share/native/libzip/ZipFile.c 2015-09-15 17:06:51.106583819 +0200 @@ -84,11 +84,14 @@ JNIEXPORT jlong JNICALL Java_java_util_zip_ZipFile_open(JNIEnv *env, jclass cls, jstring name, jint mode, jlong lastModified, - jboolean usemmap) + jboolean usemmap, + jobjectArray tableAndEntriesByteBuffers) { const char *path = JNU_GetStringPlatformChars(env, name, 0); char *msg = 0; jlong result = 0; + jobject tableByteBuffer; + jobject entriesByteBuffer; int flag = 0; jzfile *zip = 0; @@ -120,6 +123,15 @@ if (zip != 0) { result = ptr_to_jlong(zip); + if (tableAndEntriesByteBuffers != NULL) { + tableByteBuffer = (*env)->NewDirectByteBuffer(env, zip->table, (jlong) zip->tablelen * sizeof(zip->table[0])); + if (tableByteBuffer == NULL) goto finally; + entriesByteBuffer = (*env)->NewDirectByteBuffer(env, zip->entries, (jlong) zip->total * sizeof(zip->entries[0])); + if (tableByteBuffer == NULL) goto finally; + (*env)->SetObjectArrayElement(env, tableAndEntriesByteBuffers, 0, tableByteBuffer); + if ((*env)->ExceptionCheck(env)) goto finally; + (*env)->SetObjectArrayElement(env, tableAndEntriesByteBuffers, 1, entriesByteBuffer); + } } else if (msg != 0) { ThrowZipException(env, msg); free(msg);