diff options
| author | Even Rouault <even.rouault@spatialys.com> | 2017-09-01 16:30:44 +0200 |
|---|---|---|
| committer | Even Rouault <even.rouault@spatialys.com> | 2017-09-01 16:30:44 +0200 |
| commit | 98b93103613c90753fb6c57696f9403f8ea0b1d6 (patch) | |
| tree | a261e3ae2deaac359920689bc1cdb86d657fa3bf /src/lib/openjp2/sparse_array.c | |
| parent | 008a12d4fce0a7b1eabc51e04ed339be759646e2 (diff) | |
Various changes to allow tile buffers of more than 4giga pixels
Untested though, since that means a tile buffer of at least 16 GB. So
there might be places where uint32 overflow on multiplication still occur...
Diffstat (limited to 'src/lib/openjp2/sparse_array.c')
| -rw-r--r-- | src/lib/openjp2/sparse_array.c | 25 |
1 files changed, 15 insertions, 10 deletions
diff --git a/src/lib/openjp2/sparse_array.c b/src/lib/openjp2/sparse_array.c index fb552f8b..3402dca2 100644 --- a/src/lib/openjp2/sparse_array.c +++ b/src/lib/openjp2/sparse_array.c @@ -141,27 +141,30 @@ static OPJ_BOOL opj_sparse_array_int32_read_or_write( if (src_block == NULL) { for (j = 0; j < y_incr; j++) { if (buf_col_stride == 1) { - memset(buf + (y - y0 + j) * buf_line_stride + (x - x0) * buf_col_stride, + memset(buf + (y - y0 + j) * (size_t)buf_line_stride + (x - x0) * buf_col_stride, 0, sizeof(OPJ_INT32) * x_incr); } else { OPJ_UINT32 k; for (k = 0; k < x_incr; k++) { - *(buf + (y - y0 + j) * buf_line_stride + (x - x0 + k) * buf_col_stride) = 0; + *(buf + (y - y0 + j) * (size_t)buf_line_stride + (x - x0 + k) * buf_col_stride) + = 0; } } } } else { for (j = 0; j < y_incr; j++) { if (buf_col_stride == 1) { - memcpy(buf + (y - y0 + j) * buf_line_stride + (x - x0) * buf_col_stride, - src_block + (block_y_offset + j) * sa->block_width + block_x_offset, + memcpy(buf + (y - y0 + j) * (size_t)buf_line_stride + (x - x0) * buf_col_stride, + src_block + (block_y_offset + j) * (size_t)sa->block_width + block_x_offset, sizeof(OPJ_INT32) * x_incr); } else { OPJ_UINT32 k; for (k = 0; k < x_incr; k++) { - *(buf + (y - y0 + j) * buf_line_stride + (x - x0 + k) * buf_col_stride) = - *(src_block + (block_y_offset + j) * sa->block_width + block_x_offset + k); + *(buf + (y - y0 + j) * (size_t)buf_line_stride + (x - x0 + k) * buf_col_stride) + = + *(src_block + (block_y_offset + j) * (size_t)sa->block_width + block_x_offset + + k); } } } @@ -178,14 +181,16 @@ static OPJ_BOOL opj_sparse_array_int32_read_or_write( for (j = 0; j < y_incr; j++) { if (buf_col_stride == 1) { - memcpy(src_block + (block_y_offset + j) * sa->block_width + block_x_offset, - buf + (y - y0 + j) * buf_line_stride + (x - x0) * buf_col_stride, + memcpy(src_block + (block_y_offset + j) * (size_t)sa->block_width + + block_x_offset, + buf + (y - y0 + j) * (size_t)buf_line_stride + (x - x0) * buf_col_stride, sizeof(OPJ_INT32) * x_incr); } else { OPJ_UINT32 k; for (k = 0; k < x_incr; k++) { - *(src_block + (block_y_offset + j) * sa->block_width + block_x_offset + k) = - *(buf + (y - y0 + j) * buf_line_stride + (x - x0 + k) * buf_col_stride); + *(src_block + (block_y_offset + j) * (size_t)sa->block_width + block_x_offset + + k) = + *(buf + (y - y0 + j) * (size_t)buf_line_stride + (x - x0 + k) * buf_col_stride); } } } |
