< prev index next >

modules/javafx.graphics/src/main/native-iio/jpegloader.c

Print this page

        

*** 1336,1345 **** --- 1336,1347 ---- if (setjmp(jerr_mgr->setjmp_buffer)) { /* If we get here, the JPEG code has signaled an error. */ char buffer[JMSG_LENGTH_MAX]; (*cinfo->err->format_message) ((struct jpeg_common_struct *) cinfo, buffer); + free(cinfo); + free(jerr_mgr); ThrowByName(env, "java/io/IOException", buffer); return 0; } /* Perform library initialization */
*** 1353,1362 **** --- 1355,1366 ---- * Now set up our source. */ cinfo->src = (struct jpeg_source_mgr *) malloc(sizeof (struct jpeg_source_mgr)); if (cinfo->src == NULL) { + free(cinfo); + free(jerr_mgr); ThrowByName(env, "java/lang/OutOfMemoryError", "Initializing Reader"); return 0; }
*** 1369,1387 **** cinfo->src->term_source = imageio_term_source; /* set up the association to persist for future calls */ data = initImageioData(env, (j_common_ptr) cinfo, this); if (data == NULL) { ThrowByName(env, "java/lang/OutOfMemoryError", "Initializing Reader"); return 0; } imageio_set_stream(env, (j_common_ptr) cinfo, data, stream); ! if ((*env)->ExceptionCheck(env)) return 0; imageio_init_source((j_decompress_ptr) cinfo); src = cinfo->src; jerr = (sun_jpeg_error_ptr) cinfo->err; --- 1373,1399 ---- cinfo->src->term_source = imageio_term_source; /* set up the association to persist for future calls */ data = initImageioData(env, (j_common_ptr) cinfo, this); if (data == NULL) { + free(cinfo->src); + free(cinfo); + free(jerr_mgr); ThrowByName(env, "java/lang/OutOfMemoryError", "Initializing Reader"); return 0; } imageio_set_stream(env, (j_common_ptr) cinfo, data, stream); ! if ((*env)->ExceptionCheck(env)) { ! free(cinfo->src); ! free(cinfo); ! free(jerr_mgr); ! return 0; ! } imageio_init_source((j_decompress_ptr) cinfo); src = cinfo->src; jerr = (sun_jpeg_error_ptr) cinfo->err;
*** 1395,1408 **** --- 1407,1427 ---- char buffer[JMSG_LENGTH_MAX]; (*cinfo->err->format_message) ((struct jpeg_common_struct *) cinfo, buffer); ThrowByName(env, "java/io/IOException", buffer); } + free(cinfo->src); + free(cinfo); + free(jerr_mgr); return 0; } if (GET_ARRAYS(env, data, &src->next_input_byte) == NOT_OK) { + RELEASE_ARRAYS(env, data, src->next_input_byte); + free(cinfo->src); + free(cinfo); + free(jerr_mgr); ThrowByName(env, "java/io/IOException", "Array pin failed"); return 0; }
*** 1498,1507 **** --- 1517,1529 ---- /* read icc profile data */ profileData = read_icc_profile(env, cinfo); if ((*env)->ExceptionCheck(env)) { + free(cinfo->src); + free(cinfo); + free(jerr_mgr); return 0; } (*env)->CallVoidMethod(env, this, JPEGImageLoader_setInputAttributesID,
*** 1510,1519 **** --- 1532,1544 ---- cinfo->jpeg_color_space, cinfo->out_color_space, cinfo->num_components, profileData); if ((*env)->ExceptionCheck(env)) { + free(cinfo->src); + free(cinfo); + free(jerr_mgr); return 0; } } return ptr_to_jlong(data);
*** 1604,1642 **** imageIODataPtr data = (imageIODataPtr) jlong_to_ptr(ptr); j_decompress_ptr cinfo = (j_decompress_ptr) data->jpegObj; struct jpeg_source_mgr *src = cinfo->src; sun_jpeg_error_ptr jerr; int bytes_per_row = cinfo->output_width * cinfo->output_components; - JSAMPROW scanline_ptr = (JSAMPROW) malloc(bytes_per_row * sizeof (JSAMPLE)); int offset = 0; if (!SAFE_TO_MULT(cinfo->output_width, cinfo->output_components) || !SAFE_TO_MULT(bytes_per_row, cinfo->output_height) || ((*env)->GetArrayLength(env, barray) < (bytes_per_row * cinfo->output_height))) { ThrowByName(env, "java/lang/OutOfMemoryError", "Reading JPEG Stream"); return JNI_FALSE; } if (GET_ARRAYS(env, data, &cinfo->src->next_input_byte) == NOT_OK) { ThrowByName(env, "java/io/IOException", "Array pin failed"); return JNI_FALSE; } - if (scanline_ptr == NULL) { - ThrowByName(env, - "java/lang/OutOfMemoryError", - "Reading JPEG Stream"); - RELEASE_ARRAYS(env, data, cinfo->src->next_input_byte); - return JNI_FALSE; - } - /* Establish the setjmp return context for sun_jpeg_error_exit to use. */ jerr = (sun_jpeg_error_ptr) cinfo->err; if (setjmp(jerr->setjmp_buffer)) { /* If we get here, the JPEG code has signaled an error --- 1629,1668 ---- imageIODataPtr data = (imageIODataPtr) jlong_to_ptr(ptr); j_decompress_ptr cinfo = (j_decompress_ptr) data->jpegObj; struct jpeg_source_mgr *src = cinfo->src; sun_jpeg_error_ptr jerr; int bytes_per_row = cinfo->output_width * cinfo->output_components; int offset = 0; + JSAMPROW scanline_ptr = (JSAMPROW) malloc(bytes_per_row * sizeof (JSAMPLE)); + + if (scanline_ptr == NULL) { + ThrowByName(env, + "java/lang/OutOfMemoryError", + "Reading JPEG Stream"); + return JNI_FALSE; + } if (!SAFE_TO_MULT(cinfo->output_width, cinfo->output_components) || !SAFE_TO_MULT(bytes_per_row, cinfo->output_height) || ((*env)->GetArrayLength(env, barray) < (bytes_per_row * cinfo->output_height))) { + free(scanline_ptr); ThrowByName(env, "java/lang/OutOfMemoryError", "Reading JPEG Stream"); return JNI_FALSE; } if (GET_ARRAYS(env, data, &cinfo->src->next_input_byte) == NOT_OK) { + free(scanline_ptr); ThrowByName(env, "java/io/IOException", "Array pin failed"); return JNI_FALSE; } /* Establish the setjmp return context for sun_jpeg_error_exit to use. */ jerr = (sun_jpeg_error_ptr) cinfo->err; if (setjmp(jerr->setjmp_buffer)) { /* If we get here, the JPEG code has signaled an error
*** 1645,1657 **** char buffer[JMSG_LENGTH_MAX]; (*cinfo->err->format_message) ((struct jpeg_common_struct *) cinfo, buffer); ThrowByName(env, "java/io/IOException", buffer); } - if (scanline_ptr != NULL) { free(scanline_ptr); - } RELEASE_ARRAYS(env, data, cinfo->src->next_input_byte); return JNI_FALSE; } while (cinfo->output_scanline < cinfo->output_height) { --- 1671,1681 ----
*** 1659,1683 **** if (report_progress == JNI_TRUE) { RELEASE_ARRAYS(env, data, cinfo->src->next_input_byte); (*env)->CallVoidMethod(env, this, JPEGImageLoader_updateImageProgressID, cinfo->output_scanline); ! if ((*env)->ExceptionCheck(env)) return JNI_FALSE; if (GET_ARRAYS(env, data, &cinfo->src->next_input_byte) == NOT_OK) { ThrowByName(env, "java/io/IOException", "Array pin failed"); return JNI_FALSE; } } num_scanlines = jpeg_read_scanlines(cinfo, &scanline_ptr, 1); if (num_scanlines == 1) { jboolean iscopy = FALSE; jbyte *body = (*env)->GetPrimitiveArrayCritical(env, barray, &iscopy); if (body == NULL) { fprintf(stderr, "decompressIndirect: GetPrimitiveArrayCritical returns NULL: out of memory\n"); return JNI_FALSE; } memcpy(body+offset,scanline_ptr, bytes_per_row); (*env)->ReleasePrimitiveArrayCritical(env, barray, body, JNI_ABORT); offset += bytes_per_row; --- 1683,1713 ---- if (report_progress == JNI_TRUE) { RELEASE_ARRAYS(env, data, cinfo->src->next_input_byte); (*env)->CallVoidMethod(env, this, JPEGImageLoader_updateImageProgressID, cinfo->output_scanline); ! if ((*env)->ExceptionCheck(env)) { ! free(scanline_ptr); ! return JNI_FALSE; ! } if (GET_ARRAYS(env, data, &cinfo->src->next_input_byte) == NOT_OK) { ThrowByName(env, "java/io/IOException", "Array pin failed"); + free(scanline_ptr); return JNI_FALSE; } } num_scanlines = jpeg_read_scanlines(cinfo, &scanline_ptr, 1); if (num_scanlines == 1) { jboolean iscopy = FALSE; jbyte *body = (*env)->GetPrimitiveArrayCritical(env, barray, &iscopy); if (body == NULL) { fprintf(stderr, "decompressIndirect: GetPrimitiveArrayCritical returns NULL: out of memory\n"); + free(scanline_ptr); + RELEASE_ARRAYS(env, data, cinfo->src->next_input_byte); return JNI_FALSE; } memcpy(body+offset,scanline_ptr, bytes_per_row); (*env)->ReleasePrimitiveArrayCritical(env, barray, body, JNI_ABORT); offset += bytes_per_row;
*** 1687,1701 **** if (report_progress == JNI_TRUE) { RELEASE_ARRAYS(env, data, cinfo->src->next_input_byte); (*env)->CallVoidMethod(env, this, JPEGImageLoader_updateImageProgressID, cinfo->output_height); ! if ((*env)->ExceptionCheck(env)) return JNI_FALSE; if (GET_ARRAYS(env, data, &cinfo->src->next_input_byte) == NOT_OK) { ThrowByName(env, "java/io/IOException", "Array pin failed"); return JNI_FALSE; } } jpeg_finish_decompress(cinfo); --- 1717,1735 ---- if (report_progress == JNI_TRUE) { RELEASE_ARRAYS(env, data, cinfo->src->next_input_byte); (*env)->CallVoidMethod(env, this, JPEGImageLoader_updateImageProgressID, cinfo->output_height); ! if ((*env)->ExceptionCheck(env)) { ! free(scanline_ptr); ! return JNI_FALSE; ! } if (GET_ARRAYS(env, data, &cinfo->src->next_input_byte) == NOT_OK) { ThrowByName(env, "java/io/IOException", "Array pin failed"); + free(scanline_ptr); return JNI_FALSE; } } jpeg_finish_decompress(cinfo);
< prev index next >