mirror of
https://github.com/HDFGroup/hdf5.git
synced 2026-09-25 04:09:44 +03:00
Fix more undefined behavior issues (#6330)
This commit is contained in:
+23
-27
@@ -811,6 +811,8 @@ test_scalar_io(hid_t fapl)
|
||||
TEST_ERROR;
|
||||
space = -1;
|
||||
|
||||
PASSED();
|
||||
|
||||
return SUCCEED;
|
||||
|
||||
error:
|
||||
@@ -14357,7 +14359,7 @@ typedef struct scatter_info_t {
|
||||
}
|
||||
|
||||
static herr_t
|
||||
scatter_cb(void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/, void *_scatter_info)
|
||||
scatter_cb(const void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/, void *_scatter_info)
|
||||
{
|
||||
scatter_info_t *scatter_info = (scatter_info_t *)_scatter_info;
|
||||
size_t nelmts; /* Number of elements to return in src_buf */
|
||||
@@ -14367,7 +14369,7 @@ scatter_cb(void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/, void *_sc
|
||||
assert(nelmts > 0);
|
||||
|
||||
/* Set output variables */
|
||||
*src_buf = (void *)scatter_info->src_buf;
|
||||
*src_buf = scatter_info->src_buf;
|
||||
*src_buf_bytes_used = nelmts * sizeof(scatter_info->src_buf[0]);
|
||||
|
||||
/* Update scatter_info */
|
||||
@@ -14432,7 +14434,7 @@ test_scatter(void)
|
||||
scatter_info.size = 8;
|
||||
|
||||
/* Scatter data */
|
||||
if (H5Dscatter((H5D_scatter_func_t)scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
if (H5Dscatter(scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Verify data */
|
||||
@@ -14471,7 +14473,7 @@ test_scatter(void)
|
||||
scatter_info.size = 12;
|
||||
|
||||
/* Scatter data */
|
||||
if (H5Dscatter((H5D_scatter_func_t)scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
if (H5Dscatter(scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Verify data */
|
||||
@@ -14525,7 +14527,7 @@ test_scatter(void)
|
||||
scatter_info.size = 36;
|
||||
|
||||
/* Scatter data */
|
||||
if (H5Dscatter((H5D_scatter_func_t)scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
if (H5Dscatter(scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Verify data */
|
||||
@@ -14580,7 +14582,7 @@ test_scatter(void)
|
||||
scatter_info.size = 16;
|
||||
|
||||
/* Scatter data */
|
||||
if (H5Dscatter((H5D_scatter_func_t)scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
if (H5Dscatter(scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Verify data */
|
||||
@@ -14612,7 +14614,7 @@ test_scatter(void)
|
||||
scatter_info.size = 4;
|
||||
|
||||
/* Scatter data */
|
||||
if (H5Dscatter((H5D_scatter_func_t)scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
if (H5Dscatter(scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/* Verify data */
|
||||
@@ -15012,7 +15014,7 @@ error:
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
static herr_t
|
||||
scatter_error_cb_fail(void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/, void *_scatter_info)
|
||||
scatter_error_cb_fail(const void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/, void *_scatter_info)
|
||||
{
|
||||
scatter_info_t *scatter_info = (scatter_info_t *)_scatter_info;
|
||||
size_t nelmts; /* Number of elements to return in src_buf */
|
||||
@@ -15022,14 +15024,14 @@ scatter_error_cb_fail(void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/
|
||||
assert(nelmts > 0);
|
||||
|
||||
/* Set output variables */
|
||||
*src_buf = (void *)scatter_info->src_buf;
|
||||
*src_buf = scatter_info->src_buf;
|
||||
*src_buf_bytes_used = nelmts * sizeof(scatter_info->src_buf[0]);
|
||||
|
||||
return FAIL;
|
||||
} /* end scatter_error_cb_fail() */
|
||||
|
||||
static herr_t
|
||||
scatter_error_cb_null(void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/, void *_scatter_info)
|
||||
scatter_error_cb_null(const void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/, void *_scatter_info)
|
||||
{
|
||||
scatter_info_t *scatter_info = (scatter_info_t *)_scatter_info;
|
||||
size_t nelmts; /* Number of elements to return in src_buf */
|
||||
@@ -15046,7 +15048,7 @@ scatter_error_cb_null(void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/
|
||||
} /* end scatter_error_cb_null() */
|
||||
|
||||
static herr_t
|
||||
scatter_error_cb_unalign(void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/,
|
||||
scatter_error_cb_unalign(const void **src_buf /*out*/, size_t *src_buf_bytes_used /*out*/,
|
||||
void *_src_buf_bytes_used)
|
||||
{
|
||||
/* Set output variables */
|
||||
@@ -15088,7 +15090,7 @@ test_scatter_error(void)
|
||||
scatter_info.src_buf = src_buf;
|
||||
scatter_info.block = sizeof(src_buf) / sizeof(src_buf[0]);
|
||||
scatter_info.size = 6;
|
||||
if (H5Dscatter((H5D_scatter_func_t)scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
if (H5Dscatter(scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf) < 0)
|
||||
TEST_ERROR;
|
||||
|
||||
/*
|
||||
@@ -15108,7 +15110,7 @@ test_scatter_error(void)
|
||||
scatter_info.size = 6;
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
ret = H5Dscatter((H5D_scatter_func_t)scatter_cb, &scatter_info, sid, sid, dst_buf);
|
||||
ret = H5Dscatter(scatter_cb, &scatter_info, sid, sid, dst_buf);
|
||||
}
|
||||
H5E_END_TRY
|
||||
if (ret >= 0)
|
||||
@@ -15118,8 +15120,7 @@ test_scatter_error(void)
|
||||
scatter_info.size = 6;
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
ret = H5Dscatter((H5D_scatter_func_t)scatter_cb, &scatter_info, H5T_NATIVE_INT, H5T_NATIVE_INT,
|
||||
dst_buf);
|
||||
ret = H5Dscatter(scatter_cb, &scatter_info, H5T_NATIVE_INT, H5T_NATIVE_INT, dst_buf);
|
||||
}
|
||||
H5E_END_TRY
|
||||
if (ret >= 0)
|
||||
@@ -15129,7 +15130,7 @@ test_scatter_error(void)
|
||||
scatter_info.size = 6;
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
ret = H5Dscatter((H5D_scatter_func_t)scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, NULL);
|
||||
ret = H5Dscatter(scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, NULL);
|
||||
}
|
||||
H5E_END_TRY
|
||||
if (ret >= 0)
|
||||
@@ -15142,7 +15143,7 @@ test_scatter_error(void)
|
||||
scatter_info.size = 7;
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
ret = H5Dscatter((H5D_scatter_func_t)scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf);
|
||||
ret = H5Dscatter(scatter_cb, &scatter_info, H5T_NATIVE_INT, sid, dst_buf);
|
||||
}
|
||||
H5E_END_TRY
|
||||
if (ret >= 0)
|
||||
@@ -15155,8 +15156,7 @@ test_scatter_error(void)
|
||||
scatter_info.size = 6;
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
ret = H5Dscatter((H5D_scatter_func_t)scatter_error_cb_fail, &scatter_info, H5T_NATIVE_INT, sid,
|
||||
dst_buf);
|
||||
ret = H5Dscatter(scatter_error_cb_fail, &scatter_info, H5T_NATIVE_INT, sid, dst_buf);
|
||||
}
|
||||
H5E_END_TRY
|
||||
if (ret >= 0)
|
||||
@@ -15169,8 +15169,7 @@ test_scatter_error(void)
|
||||
scatter_info.size = 6;
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
ret = H5Dscatter((H5D_scatter_func_t)scatter_error_cb_null, &scatter_info, H5T_NATIVE_INT, sid,
|
||||
dst_buf);
|
||||
ret = H5Dscatter(scatter_error_cb_null, &scatter_info, H5T_NATIVE_INT, sid, dst_buf);
|
||||
}
|
||||
H5E_END_TRY
|
||||
if (ret >= 0)
|
||||
@@ -15182,8 +15181,7 @@ test_scatter_error(void)
|
||||
cb_unalign_nbytes = 0;
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
ret = H5Dscatter((H5D_scatter_func_t)scatter_error_cb_unalign, &cb_unalign_nbytes, H5T_NATIVE_INT,
|
||||
sid, dst_buf);
|
||||
ret = H5Dscatter(scatter_error_cb_unalign, &cb_unalign_nbytes, H5T_NATIVE_INT, sid, dst_buf);
|
||||
}
|
||||
H5E_END_TRY
|
||||
if (ret >= 0)
|
||||
@@ -15196,8 +15194,7 @@ test_scatter_error(void)
|
||||
cb_unalign_nbytes = sizeof(src_buf[0]) - 1;
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
ret = H5Dscatter((H5D_scatter_func_t)scatter_error_cb_unalign, &cb_unalign_nbytes, H5T_NATIVE_INT,
|
||||
sid, dst_buf);
|
||||
ret = H5Dscatter(scatter_error_cb_unalign, &cb_unalign_nbytes, H5T_NATIVE_INT, sid, dst_buf);
|
||||
}
|
||||
H5E_END_TRY
|
||||
if (ret >= 0)
|
||||
@@ -15206,8 +15203,7 @@ test_scatter_error(void)
|
||||
cb_unalign_nbytes = sizeof(src_buf[0]) + 1;
|
||||
H5E_BEGIN_TRY
|
||||
{
|
||||
ret = H5Dscatter((H5D_scatter_func_t)scatter_error_cb_unalign, &cb_unalign_nbytes, H5T_NATIVE_INT,
|
||||
sid, dst_buf);
|
||||
ret = H5Dscatter(scatter_error_cb_unalign, &cb_unalign_nbytes, H5T_NATIVE_INT, sid, dst_buf);
|
||||
}
|
||||
H5E_END_TRY
|
||||
if (ret >= 0)
|
||||
|
||||
+3
-3
@@ -157,11 +157,11 @@ static int without_hardware_g = 0;
|
||||
} \
|
||||
\
|
||||
if (n < SRC_PREC - 2) { \
|
||||
value1 = (TYPE)(value1 << 1); \
|
||||
value1 = (TYPE)((uint64_t)value1 << 1); \
|
||||
value2 = (TYPE)((value1 - 1) | value1); \
|
||||
} \
|
||||
else if (n == SRC_PREC - 2) { /*to avoid overflow of negative values for signed integer*/ \
|
||||
value1 = (TYPE)(value1 << 1); \
|
||||
value1 = (TYPE)((uint64_t)value1 << 1); \
|
||||
value2 = (TYPE)((~value1) | value1); \
|
||||
} \
|
||||
} \
|
||||
@@ -176,7 +176,7 @@ static int without_hardware_g = 0;
|
||||
saved_p += SRC_SIZE; \
|
||||
} \
|
||||
if (n < SRC_PREC - 1) \
|
||||
value2 = (TYPE)(value2 << 1); \
|
||||
value2 = (TYPE)((uint64_t)value2 << 1); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
|
||||
+1
-1
@@ -54,7 +54,7 @@ const float windchillFfloat[ROWS][COLS] = {
|
||||
{25.0F, 18.0F, 11.0F, 4.0F, -3.0F, -11.0F, -18.0F, -25.0F, -32.0F, -39.0F, -46.0F, -54.0F, -61.0F, -68.0F,
|
||||
-75.0F, -82.0F, -89.0F, -97.0F},
|
||||
{25.0F, 17.0F, 10.0F, 3.0F, -4.0F, -11.0F, -19.0F, -26.0F, -33.0F, -40.0F, -48.0F, -55.0F, -62.0F, -69.0F,
|
||||
-76.0F, -84.0F, -91.0F, -98.0F}};
|
||||
-76.0F, -84.0F, -91.0F, -97.0F}};
|
||||
|
||||
const int transformData[ROWS][COLS] = {{36, 31, 25, 19, 13, 7, 1, 5, 11, 16, 22, 28, 34, 40, 46, 52, 57, 63},
|
||||
{34, 27, 21, 15, 9, 3, 4, 10, 16, 22, 28, 35, 41, 47, 53, 59, 66, 1},
|
||||
|
||||
+37
-30
@@ -737,12 +737,12 @@ error:
|
||||
static herr_t
|
||||
test_transpose(size_t nx, size_t ny)
|
||||
{
|
||||
int *src = NULL;
|
||||
int *dst = NULL;
|
||||
hsize_t src_stride[2], dst_stride[2];
|
||||
hsize_t size[2];
|
||||
char s[256];
|
||||
hsize_t i, j;
|
||||
hssize_t src_stride[2], dst_stride[2];
|
||||
int *src = NULL;
|
||||
int *dst = NULL;
|
||||
hsize_t size[2];
|
||||
char s[256];
|
||||
hsize_t i, j;
|
||||
|
||||
snprintf(s, sizeof(s), "Testing 2d transpose by stride %4lux%-lud", (unsigned long)nx, (unsigned long)ny);
|
||||
printf("%-70s", s);
|
||||
@@ -762,12 +762,12 @@ test_transpose(size_t nx, size_t ny)
|
||||
size[0] = nx;
|
||||
size[1] = ny;
|
||||
src_stride[0] = 0;
|
||||
src_stride[1] = sizeof(*src);
|
||||
dst_stride[0] = (hsize_t)((1 - nx * ny) * sizeof(*src));
|
||||
dst_stride[1] = (hsize_t)(nx * sizeof(*src));
|
||||
src_stride[1] = (hssize_t)sizeof(*src);
|
||||
dst_stride[0] = (hssize_t)((1 - nx * ny) * sizeof(*src));
|
||||
dst_stride[1] = (hssize_t)(nx * sizeof(*src));
|
||||
|
||||
/* Copy and transpose */
|
||||
H5VM_stride_copy(2, (hsize_t)sizeof(*src), size, dst_stride, dst, src_stride, src);
|
||||
H5VM_stride_copy_s(2, (hsize_t)sizeof(*src), size, dst_stride, dst, src_stride, src);
|
||||
|
||||
/* Check */
|
||||
for (i = 0; i < nx; i++) {
|
||||
@@ -830,12 +830,14 @@ error:
|
||||
static herr_t
|
||||
test_sub_super(size_t nx, size_t ny)
|
||||
{
|
||||
uint8_t *full = NULL; /*original image */
|
||||
uint8_t *half = NULL; /*image at 1/2 resolution */
|
||||
uint8_t *twice = NULL; /*2x2 pixels */
|
||||
hsize_t src_stride[4]; /*source stride info */
|
||||
hsize_t dst_stride[4]; /*destination stride info */
|
||||
hsize_t size[4]; /*number of sample points */
|
||||
hssize_t src_stride_s[4]; /*signed source stride info */
|
||||
hssize_t dst_stride_s[4]; /*signed destination stride info */
|
||||
uint8_t *full = NULL; /*original image */
|
||||
uint8_t *half = NULL; /*image at 1/2 resolution */
|
||||
uint8_t *twice = NULL; /*2x2 pixels */
|
||||
hsize_t src_stride[4]; /*source stride info */
|
||||
hsize_t dst_stride[4]; /*destination stride info */
|
||||
hsize_t size[4]; /*number of sample points */
|
||||
hsize_t i, j;
|
||||
char s[256];
|
||||
|
||||
@@ -895,21 +897,21 @@ test_sub_super(size_t nx, size_t ny)
|
||||
fflush(stdout);
|
||||
|
||||
/* Setup stride */
|
||||
size[0] = nx;
|
||||
size[1] = ny;
|
||||
size[2] = 2;
|
||||
size[3] = 2;
|
||||
src_stride[0] = 0;
|
||||
src_stride[1] = 1;
|
||||
src_stride[2] = 0;
|
||||
src_stride[3] = 0;
|
||||
dst_stride[0] = (hsize_t)(2 * ny);
|
||||
dst_stride[1] = (hsize_t)(2 * sizeof(uint8_t) - 4 * ny);
|
||||
dst_stride[2] = (hsize_t)(2 * ny - 2 * sizeof(uint8_t));
|
||||
dst_stride[3] = sizeof(uint8_t);
|
||||
size[0] = nx;
|
||||
size[1] = ny;
|
||||
size[2] = 2;
|
||||
size[3] = 2;
|
||||
src_stride_s[0] = 0;
|
||||
src_stride_s[1] = 1;
|
||||
src_stride_s[2] = 0;
|
||||
src_stride_s[3] = 0;
|
||||
dst_stride_s[0] = (hssize_t)(2 * ny);
|
||||
dst_stride_s[1] = (hssize_t)(2 * sizeof(uint8_t) - 4 * ny);
|
||||
dst_stride_s[2] = (hssize_t)(2 * ny - 2 * sizeof(uint8_t));
|
||||
dst_stride_s[3] = (hssize_t)sizeof(uint8_t);
|
||||
|
||||
/* Copy */
|
||||
H5VM_stride_copy(4, (hsize_t)sizeof(uint8_t), size, dst_stride, twice, src_stride, half);
|
||||
H5VM_stride_copy_s(4, (hsize_t)sizeof(uint8_t), size, dst_stride_s, twice, src_stride_s, half);
|
||||
|
||||
/* Check */
|
||||
s[0] = '\0';
|
||||
@@ -1071,8 +1073,13 @@ test_array_offset_n_calc(size_t n, size_t x, size_t y, size_t z)
|
||||
off = H5VM_array_offset(ARRAY_OFFSET_NDIMS, dims, coords);
|
||||
|
||||
/* Check offset of coordinate */
|
||||
if (a[off] != off)
|
||||
if (a[off] != off) {
|
||||
fprintf(stderr,
|
||||
"incorrect offset for coordinate (%" PRIuHSIZE ", %" PRIuHSIZE ", %" PRIuHSIZE ")."
|
||||
" expected %" PRIuHSIZE ", got %" PRIuHSIZE "\n",
|
||||
coords[0], coords[1], coords[2], off, a[off]);
|
||||
TEST_ERROR;
|
||||
}
|
||||
|
||||
/* Get coordinates of offset */
|
||||
if (H5VM_array_calc(off, ARRAY_OFFSET_NDIMS, dims, new_coords) < 0)
|
||||
|
||||
Reference in New Issue
Block a user