summaryrefslogtreecommitdiff
path: root/src/lib/openjp2/sparse_array.c
diff options
context:
space:
mode:
authorEven Rouault <even.rouault@spatialys.com>2017-09-01 16:30:44 +0200
committerEven Rouault <even.rouault@spatialys.com>2017-09-01 16:30:44 +0200
commit98b93103613c90753fb6c57696f9403f8ea0b1d6 (patch)
treea261e3ae2deaac359920689bc1cdb86d657fa3bf /src/lib/openjp2/sparse_array.c
parent008a12d4fce0a7b1eabc51e04ed339be759646e2 (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.c25
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);
}
}
}