summaryrefslogtreecommitdiff
path: root/src/cl_api.c
diff options
context:
space:
mode:
authorZhigang Gong <zhigang.gong@intel.com>2013-12-03 15:26:46 +0800
committerZhigang Gong <zhigang.gong@intel.com>2013-12-11 09:57:33 +0800
commit8fe988da5c7a60f089b98af9c83426be72be1bb4 (patch)
treee67276c8a2d0f265ed56bb7aff7ed919b7a9bee1 /src/cl_api.c
parente8d27b8fda55376e7593a71ce53cbbf2b81e337a (diff)
Runtime: fixed the region check for three rect region related APIs.
Signed-off-by: Zhigang Gong <zhigang.gong@intel.com> Reviewed-by: "Yang, Rong R" <rong.r.yang@intel.com>
Diffstat (limited to 'src/cl_api.c')
-rw-r--r--src/cl_api.c16
1 files changed, 12 insertions, 4 deletions
diff --git a/src/cl_api.c b/src/cl_api.c
index 54701aa9..1f720c7c 100644
--- a/src/cl_api.c
+++ b/src/cl_api.c
@@ -1432,7 +1432,9 @@ clEnqueueReadBufferRect(cl_command_queue command_queue,
goto error;
}
- if ((buffer_origin[2]+region[2])*buffer_slice_pitch + (buffer_origin[1]+region[1])*buffer_row_pitch + buffer_origin[0] + region[0] > buffer->size) {
+ if ((buffer_origin[2] + region[2] - 1) * buffer_slice_pitch
+ + (buffer_origin[1] + region[1] - 1) * buffer_row_pitch
+ + buffer_origin[0] + region[0] > buffer->size) {
err = CL_INVALID_VALUE;
goto error;
}
@@ -1565,7 +1567,9 @@ clEnqueueWriteBufferRect(cl_command_queue command_queue,
goto error;
}
- if ((buffer_origin[2]+region[2])*buffer_slice_pitch + (buffer_origin[1]+region[1])*buffer_row_pitch + buffer_origin[0] + region[0] > buffer->size) {
+ if ((buffer_origin[2] + region[2] - 1) * buffer_slice_pitch
+ + (buffer_origin[1] + region[1] - 1) * buffer_row_pitch
+ + buffer_origin[0] + region[0] > buffer->size) {
err = CL_INVALID_VALUE;
goto error;
}
@@ -1733,8 +1737,12 @@ clEnqueueCopyBufferRect(cl_command_queue command_queue,
goto error;
}
- if ((src_origin[2]+region[2])*src_slice_pitch + (src_origin[1]+region[1])*src_row_pitch + src_origin[0] + region[0] > src_buffer->size ||
- (dst_origin[2]+region[2])*dst_slice_pitch + (dst_origin[1]+region[1])*dst_row_pitch + dst_origin[0] + region[0] > dst_buffer->size) {
+ if ((src_origin[2] + region[2] - 1) * src_slice_pitch
+ + (src_origin[1] + region[1] - 1) * src_row_pitch
+ + src_origin[0] + region[0] > src_buffer->size
+ ||(dst_origin[2] + region[2] - 1) * dst_slice_pitch
+ + (dst_origin[1] + region[1] - 1) * dst_row_pitch
+ + dst_origin[0] + region[0] > dst_buffer->size) {
err = CL_INVALID_VALUE;
goto error;
}