提交 f7e15770 编写于 作者: P prr

8029854: Enhance JPEG decodings

Reviewed-by: bae, vadim, mschoene
上级 3ef383c3
...@@ -249,6 +249,7 @@ Java_sun_awt_image_GifImageDecoder_parseImage(JNIEnv *env, ...@@ -249,6 +249,7 @@ Java_sun_awt_image_GifImageDecoder_parseImage(JNIEnv *env,
/* fill the block */ /* fill the block */
len = (*env)->CallIntMethod(env, this, readID, len = (*env)->CallIntMethod(env, this, readID,
blockh, remain, blockLength + 1); blockh, remain, blockLength + 1);
if (len > blockLength + 1) len = blockLength + 1;
if ((*env)->ExceptionOccurred(env)) { if ((*env)->ExceptionOccurred(env)) {
return 0; return 0;
} }
......
...@@ -939,6 +939,7 @@ imageio_fill_input_buffer(j_decompress_ptr cinfo) ...@@ -939,6 +939,7 @@ imageio_fill_input_buffer(j_decompress_ptr cinfo)
JPEGImageReader_readInputDataID, JPEGImageReader_readInputDataID,
sb->hstreamBuffer, 0, sb->hstreamBuffer, 0,
sb->bufferLength); sb->bufferLength);
if (ret > sb->bufferLength) ret = sb->bufferLength;
if ((*env)->ExceptionOccurred(env) if ((*env)->ExceptionOccurred(env)
|| !GET_ARRAYS(env, data, &(src->next_input_byte))) { || !GET_ARRAYS(env, data, &(src->next_input_byte))) {
cinfo->err->error_exit((j_common_ptr) cinfo); cinfo->err->error_exit((j_common_ptr) cinfo);
...@@ -1035,6 +1036,7 @@ imageio_fill_suspended_buffer(j_decompress_ptr cinfo) ...@@ -1035,6 +1036,7 @@ imageio_fill_suspended_buffer(j_decompress_ptr cinfo)
JPEGImageReader_readInputDataID, JPEGImageReader_readInputDataID,
sb->hstreamBuffer, sb->hstreamBuffer,
offset, buflen); offset, buflen);
if (ret > buflen) ret = buflen;
if ((*env)->ExceptionOccurred(env) if ((*env)->ExceptionOccurred(env)
|| !GET_ARRAYS(env, data, &(src->next_input_byte))) { || !GET_ARRAYS(env, data, &(src->next_input_byte))) {
cinfo->err->error_exit((j_common_ptr) cinfo); cinfo->err->error_exit((j_common_ptr) cinfo);
......
...@@ -289,6 +289,7 @@ sun_jpeg_fill_input_buffer(j_decompress_ptr cinfo) ...@@ -289,6 +289,7 @@ sun_jpeg_fill_input_buffer(j_decompress_ptr cinfo)
buflen = (*env)->GetArrayLength(env, src->hInputBuffer); buflen = (*env)->GetArrayLength(env, src->hInputBuffer);
ret = (*env)->CallIntMethod(env, src->hInputStream, InputStream_readID, ret = (*env)->CallIntMethod(env, src->hInputStream, InputStream_readID,
src->hInputBuffer, 0, buflen); src->hInputBuffer, 0, buflen);
if (ret > buflen) ret = buflen;
if ((*env)->ExceptionOccurred(env) || !GET_ARRAYS(env, src)) { if ((*env)->ExceptionOccurred(env) || !GET_ARRAYS(env, src)) {
cinfo->err->error_exit((struct jpeg_common_struct *) cinfo); cinfo->err->error_exit((struct jpeg_common_struct *) cinfo);
} }
...@@ -349,6 +350,7 @@ sun_jpeg_fill_suspended_buffer(j_decompress_ptr cinfo) ...@@ -349,6 +350,7 @@ sun_jpeg_fill_suspended_buffer(j_decompress_ptr cinfo)
} }
ret = (*env)->CallIntMethod(env, src->hInputStream, InputStream_readID, ret = (*env)->CallIntMethod(env, src->hInputStream, InputStream_readID,
src->hInputBuffer, offset, buflen); src->hInputBuffer, offset, buflen);
if (ret > buflen) ret = buflen;
if ((*env)->ExceptionOccurred(env) || !GET_ARRAYS(env, src)) { if ((*env)->ExceptionOccurred(env) || !GET_ARRAYS(env, src)) {
cinfo->err->error_exit((struct jpeg_common_struct *) cinfo); cinfo->err->error_exit((struct jpeg_common_struct *) cinfo);
} }
...@@ -424,6 +426,7 @@ sun_jpeg_skip_input_data(j_decompress_ptr cinfo, long num_bytes) ...@@ -424,6 +426,7 @@ sun_jpeg_skip_input_data(j_decompress_ptr cinfo, long num_bytes)
ret = (*env)->CallIntMethod(env, src->hInputStream, ret = (*env)->CallIntMethod(env, src->hInputStream,
InputStream_readID, InputStream_readID,
src->hInputBuffer, 0, buflen); src->hInputBuffer, 0, buflen);
if (ret > buflen) ret = buflen;
if ((*env)->ExceptionOccurred(env)) { if ((*env)->ExceptionOccurred(env)) {
cinfo->err->error_exit((struct jpeg_common_struct *) cinfo); cinfo->err->error_exit((struct jpeg_common_struct *) cinfo);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册