mirror of
https://github.com/HDFGroup/hdf5.git
synced 2025-03-13 16:47:58 +08:00
[svn-r21658] Purpose:
HDFFV-7770 - h5diff segmentation fault on JPSS files Description: Fixed segfault over non-comparable attribute with different dimention or rank, along with '-c' option to display details. Tested: jam (linux32-LE), koala (linux64-LE), heiwa (linuxppc64-BE), tejeda (mac32-LE), linew (solaris-BE), Windows, Cmake
This commit is contained in:
parent
1dcc75407e
commit
e54d15a26c
@ -624,24 +624,27 @@ Bug Fixes since HDF5-1.8.0 release
|
||||
|
||||
Tools
|
||||
-----
|
||||
- Fixed h5diff to display all the comparable object and attribute
|
||||
regardless of non-comparables. HDFFV-7693 (JKM 09/16/2011)
|
||||
- Fixed h5repack to update values of references(object and region) of
|
||||
attributes in h5repack for 1) references, 2) ARRAY of references,
|
||||
3) VLEN of references, and 4) COMPOUND of references.
|
||||
(JIRA HDF5 5932) PC -2011/09/14
|
||||
- h5diff: fixed segfault over non-comparable attribute with different
|
||||
dimention or rank, along with '-c' option to display details.
|
||||
HDFFV-7770 (JKM 2011/10/24)
|
||||
- Fixed h5diff to display all the comparable object and attribute
|
||||
regardless of non-comparables. HDFFV-7693 (JKM 2011/09/16)
|
||||
- Fixed h5repack to update values of references(object and region) of
|
||||
attributes in h5repack for 1) references, 2) ARRAY of references,
|
||||
3) VLEN of references, and 4) COMPOUND of references.
|
||||
(JIRA HDF5 5932) PC -2011/09/14
|
||||
- h5diff: fixed segfault over dataset with container types
|
||||
(array,lven) with multiple nested compound types.
|
||||
(ex: compound->array->compound, compound->vlen->compound)
|
||||
HDFFV-7712 JKM (09/01/2011)
|
||||
HDFFV-7712 JKM (2011/09/01)
|
||||
- h5repack: added macro to handle failure in H5Dread/write when memory
|
||||
allocation failed inside the library. (PC -- 2011/08/19)
|
||||
- Fixed h5jam not to allow specifying an HDF5 formatted file as input
|
||||
file for -u (user block file) option, because the original HDF5 file
|
||||
will not be accessible if allows. HDFFV-5941 (JKM 08/15/2011)
|
||||
will not be accessible if allows. HDFFV-5941 (JKM 2011/08/15)
|
||||
- Revised command help pages of h5jam and h5unjam. The descriptions
|
||||
were not up to date and some were missing.
|
||||
HDFFV-7515 (JKM 08/15/2011)
|
||||
HDFFV-7515 (JKM 2011/08/15)
|
||||
- h5repack: h5repack failed to copy dataset if the layout is changed
|
||||
from chunked with unlimited dims to contiguous. HDFFV-7649
|
||||
(PC -- 2011/07/15)
|
||||
@ -650,29 +653,29 @@ Bug Fixes since HDF5-1.8.0 release
|
||||
Manual. HDFFV-7656 (PC -- 2011/07/15)
|
||||
- Fixed h5diff to display instructive error message and exit with 1
|
||||
when mutually exclusive options (-d, -p and --use-system-epsilon)
|
||||
are used together. HDFFV-7600 (JKM 07/07/2011)
|
||||
are used together. HDFFV-7600 (JKM 2011/07/07)
|
||||
- Fixed h5dump to display the first line of each element into correct
|
||||
position for multiple dimention array type.
|
||||
Before this fix, the first line of each element in array were
|
||||
displayed after the last line of previous element without
|
||||
moving to the next line (+indentation).
|
||||
Bug #HDFFV-5878 (JKM 06/15/2011)
|
||||
Bug #HDFFV-5878 (JKM 2011/06/15)
|
||||
- Fixed h5dump to display correct value for H5T_STD_I8LE dataset
|
||||
on a system (ppc64, linux, Big-Endian, clustering).
|
||||
Bug #HDFFV-7594 (ABERT & JKM 05/12/2011)
|
||||
Bug #HDFFV-7594 (ABERT & JKM 2011/05/12)
|
||||
- Fixed h5diff to compare file itself correctly. Previously h5diff
|
||||
reported either different or not compatible in certain cases even
|
||||
comparing file itself. This fix also improve performance when
|
||||
comparing same target objects through verifying the obj&file
|
||||
addresses before comparing the details in the objects (ex: datasets
|
||||
or attributes) Bug #HDFFV-5928 (XCAO & JKM 05/06/2011)
|
||||
or attributes) Bug #HDFFV-5928 (XCAO & JKM 2011/05/06)
|
||||
- Updated h5dump test case script to prevent entire test failure upon
|
||||
source directory is read-only. Bug# HDFFV-4342 (JKM 2011/4/12)
|
||||
- Fixed h5dump displaying incorrect values for H5T_STD_I8BE type data in
|
||||
attribute on Big-Endian machine. H5T_STD_I8BE is unsigned 8bit type,
|
||||
so h5dump is supposed to display -2 instead of 254. It worked
|
||||
correctly on Little-Endian system , but not on Big-Endian system.
|
||||
Bug #HDFFV-4358 (JKM 04/08/2011)
|
||||
Bug #HDFFV-4358 (JKM 2011/04/08)
|
||||
- Updated to unify option name to '--enable-error-stack' for printing
|
||||
HDF5 error stack messages for HDF5 tools. h5ls and h5dump for now.
|
||||
For h5ls, this replaces "-e/--errors" option, which is deprecated.
|
||||
|
@ -1131,6 +1131,7 @@ ADD_H5_TEST (h5diff_208 0 -c ${FILE19} ${FILE20})
|
||||
ADD_H5_TEST (h5diff_220 1 -c non_comparables1.h5 non_comparables2.h5 /g1)
|
||||
|
||||
# comparable dataset with non-comparable attribute and other comparable attributes.
|
||||
# Also test non-compatible attributes with different type, dimention, rank.
|
||||
# All the rest comparables should display differences.
|
||||
ADD_H5_TEST (h5diff_221 1 -c non_comparables1.h5 non_comparables2.h5 /g2)
|
||||
|
||||
|
@ -4701,9 +4701,14 @@ static void test_non_comparables (const char * fname, int make_diffs)
|
||||
hid_t sid1=0;
|
||||
hid_t tid_dset1=0;
|
||||
hid_t tid_attr1=0;
|
||||
hsize_t dims1[1] = {DIM_ARRY};
|
||||
hsize_t dims1_1[1] = {DIM_ARRY};
|
||||
hsize_t dims1_2[1] = {DIM_ARRY+1};
|
||||
hsize_t dims2[2] = {DIM_ARRY, 1};
|
||||
int data1[DIM_ARRY] = {0,0,0};
|
||||
int data2[DIM_ARRY] = {1,1,1};
|
||||
int data3[DIM_ARRY+1] = {1,1,1,1};
|
||||
int data1_dim2[DIM_ARRY][1] = {0,0,0};
|
||||
int rank_attr;
|
||||
char data1_str[DIM_ARRY][STR_SIZE]= {"ab","cd","ef"};
|
||||
herr_t status = SUCCEED;
|
||||
int i;
|
||||
@ -4713,6 +4718,9 @@ static void test_non_comparables (const char * fname, int make_diffs)
|
||||
void *attr_data_ptr1=NULL;
|
||||
void *attr_data_ptr2=NULL;
|
||||
void *attr_data_ptr3=NULL;
|
||||
void *attr_data_ptr4=NULL;
|
||||
void *attr2_dim_ptr=NULL;
|
||||
void *attr3_dim_ptr=NULL;
|
||||
|
||||
/* init */
|
||||
tid_dset1=H5Tcopy(H5T_NATIVE_INT);
|
||||
@ -4722,6 +4730,10 @@ static void test_non_comparables (const char * fname, int make_diffs)
|
||||
tid_attr1=H5Tcopy(H5T_NATIVE_INT);
|
||||
attr_data_ptr1=(int*)&data1;
|
||||
attr_data_ptr3=(int*)&data1;
|
||||
attr_data_ptr4=(int*)&data1;
|
||||
attr2_dim_ptr=(hsize_t*)&dims1_1;
|
||||
attr3_dim_ptr=(hsize_t*)&dims1_1;
|
||||
rank_attr=1;
|
||||
|
||||
if (make_diffs)
|
||||
{
|
||||
@ -4737,12 +4749,22 @@ static void test_non_comparables (const char * fname, int make_diffs)
|
||||
* group2
|
||||
*/
|
||||
dset_data_ptr3=(int*)&data2;
|
||||
/* attr1 */
|
||||
/* dset1/attr1 */
|
||||
tid_attr1=H5Tcopy(H5T_C_S1);
|
||||
H5Tset_size(tid_attr1, (size_t)STR_SIZE);
|
||||
attr_data_ptr2=(char*)&data1_str;
|
||||
/* attr2 */
|
||||
attr_data_ptr3=(int*)&data2;
|
||||
|
||||
/* dset1/attr2 */
|
||||
attr2_dim_ptr=(hsize_t*)&dims1_2;
|
||||
|
||||
/* dset1/attr3 */
|
||||
attr_data_ptr3=(int*)&data1_dim2;
|
||||
attr3_dim_ptr=(hsize_t*)&dims2;
|
||||
rank_attr=2;
|
||||
|
||||
/* dset1/attr4 */
|
||||
attr_data_ptr4=(int*)&data2;
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -4779,7 +4801,7 @@ static void test_non_comparables (const char * fname, int make_diffs)
|
||||
/*-----------------------------------------------------------------------
|
||||
* Datasets in /g1
|
||||
*------------------------------------------------------------------------*/
|
||||
if((sid1 = H5Screate_simple(1, dims1, NULL)) < 0)
|
||||
if((sid1 = H5Screate_simple(1, dims1_1, NULL)) < 0)
|
||||
goto out;
|
||||
|
||||
/* dset1 */
|
||||
@ -4796,10 +4818,10 @@ static void test_non_comparables (const char * fname, int make_diffs)
|
||||
status = FAIL;
|
||||
goto out;
|
||||
}
|
||||
write_attr(did1,1,dims1,"attr", H5T_NATIVE_INT, attr_data_ptr1);
|
||||
write_attr(did1,1,dims1_1,"attr", H5T_NATIVE_INT, attr_data_ptr1);
|
||||
|
||||
/* dset2 */
|
||||
status = write_dset(gid1, 1, dims1,"dset2", H5T_NATIVE_INT, dset_data_ptr2);
|
||||
status = write_dset(gid1, 1, dims1_1,"dset2", H5T_NATIVE_INT, dset_data_ptr2);
|
||||
if (status == FAIL)
|
||||
{
|
||||
fprintf(stderr, "Error: %s> write_dset failed\n", fname);
|
||||
@ -4809,7 +4831,8 @@ static void test_non_comparables (const char * fname, int make_diffs)
|
||||
/*-----------------------------------------------------------------------
|
||||
* Datasets in /g2
|
||||
*------------------------------------------------------------------------*/
|
||||
/* dset1 */
|
||||
/* ---------
|
||||
* dset1 */
|
||||
if((did2 = H5Dcreate2(gid2, "dset1", H5T_NATIVE_INT, sid1, H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)) < 0)
|
||||
{
|
||||
fprintf(stderr, "Error: %s> H5Dcreate2 failed.\n", "dset1");
|
||||
@ -4823,14 +4846,22 @@ static void test_non_comparables (const char * fname, int make_diffs)
|
||||
status = FAIL;
|
||||
goto out;
|
||||
}
|
||||
/* attr1 */
|
||||
write_attr(did2,1,dims1,"attr1", tid_attr1, attr_data_ptr2);
|
||||
/* attr1 - non-compatible : different type */
|
||||
write_attr(did2,1,dims1_1,"attr1", tid_attr1, attr_data_ptr2);
|
||||
|
||||
/* attr2 */
|
||||
write_attr(did2,1,dims1,"attr2", H5T_NATIVE_INT, attr_data_ptr3);
|
||||
|
||||
/* dset2 */
|
||||
status = write_dset(gid2, 1, dims1,"dset2", H5T_NATIVE_INT, dset_data_ptr3);
|
||||
/* attr2 - non-compatible : same rank, different dimention */
|
||||
write_attr(did2,1, attr2_dim_ptr,"attr2", H5T_NATIVE_INT, data3);
|
||||
|
||||
/* attr3 - non-compatible : different rank */
|
||||
write_attr(did2, rank_attr,attr3_dim_ptr,"attr3", H5T_NATIVE_INT, attr_data_ptr3);
|
||||
|
||||
/* attr4 - compatible : different data values */
|
||||
write_attr(did2,1,dims1_1,"attr4", H5T_NATIVE_INT, attr_data_ptr4);
|
||||
|
||||
/*----------
|
||||
* dset2 */
|
||||
status = write_dset(gid2, 1, dims1_1,"dset2", H5T_NATIVE_INT, dset_data_ptr3);
|
||||
if (status == FAIL)
|
||||
{
|
||||
fprintf(stderr, "Error: %s> write_dset failed\n", fname);
|
||||
|
@ -1,5 +1,9 @@
|
||||
Not comparable: <attr1> is of class H5T_INTEGER and <attr1> is of class H5T_STRING
|
||||
attribute: <attr2 of </g2/dset1>> and <attr2 of </g2/dset1>>
|
||||
Not comparable: <attr2> has rank 1, dimensions [3], max dimensions [3]
|
||||
and <attr2> has rank 1, dimensions [4], max dimensions [4]
|
||||
Not comparable: <attr3> has rank 1, dimensions [3], max dimensions [3]
|
||||
and <attr3> has rank 2, dimensions [3x1], max dimensions [3x1]
|
||||
attribute: <attr4 of </g2/dset1>> and <attr4 of </g2/dset1>>
|
||||
3 differences found
|
||||
dataset: </g2/dset1> and </g2/dset1>
|
||||
6 differences found
|
||||
|
@ -6,7 +6,11 @@ dataset: </g1/dset1> and </g1/dset1>
|
||||
dataset: </g1/dset2> and </g1/dset2>
|
||||
3 differences found
|
||||
Not comparable: <attr1> is of class H5T_INTEGER and <attr1> is of class H5T_STRING
|
||||
attribute: <attr2 of </g2/dset1>> and <attr2 of </g2/dset1>>
|
||||
Not comparable: <attr2> has rank 1, dimensions [3], max dimensions [3]
|
||||
and <attr2> has rank 1, dimensions [4], max dimensions [4]
|
||||
Not comparable: <attr3> has rank 1, dimensions [3], max dimensions [3]
|
||||
and <attr3> has rank 2, dimensions [3x1], max dimensions [3x1]
|
||||
attribute: <attr4 of </g2/dset1>> and <attr4 of </g2/dset1>>
|
||||
3 differences found
|
||||
dataset: </g2/dset1> and </g2/dset1>
|
||||
6 differences found
|
||||
|
Binary file not shown.
Binary file not shown.
@ -799,7 +799,8 @@ TOOLTEST h5diff_207.txt -c h5diff_basic2.h5 h5diff_basic2.h5 g2/dset8 g2/dset9
|
||||
# not comparable in dataspace of zero dimension size
|
||||
TOOLTEST h5diff_208.txt -c h5diff_dset_zero_dim_size1.h5 h5diff_dset_zero_dim_size2.h5
|
||||
|
||||
# non-comparable dataset with comparable attribute, and other comparable datasets.
|
||||
# non-comparable dataset with comparable attribute, and other comparable datasets.
|
||||
# Also test non-compatible attributes with different type, dimention, rank.
|
||||
# All the comparables should display differences.
|
||||
TOOLTEST h5diff_220.txt -c non_comparables1.h5 non_comparables2.h5 /g1
|
||||
|
||||
|
@ -380,8 +380,10 @@ hsize_t diff_attr(hid_t loc1_id,
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
/* pass dims1 and dims2 for maxdims as well since attribute's maxdims
|
||||
* are always same */
|
||||
if( diff_can_type(ftype1_id, ftype2_id, rank1, rank2, dims1, dims2,
|
||||
NULL, NULL, name1, name2, options, 0) != 1 )
|
||||
dims1, dims2, name1, name2, options, 0) != 1 )
|
||||
{
|
||||
if(H5Tclose(ftype1_id) < 0)
|
||||
goto error;
|
||||
|
@ -35,24 +35,27 @@ print_dimensions (int rank, hsize_t *dims)
|
||||
{
|
||||
int i;
|
||||
|
||||
if ( rank > 0 )
|
||||
{
|
||||
|
||||
parallel_print("[" );
|
||||
for ( i = 0; i < rank-1; i++)
|
||||
{
|
||||
parallel_print(HSIZE_T_FORMAT, dims[i]);
|
||||
parallel_print("x");
|
||||
}
|
||||
|
||||
parallel_print(HSIZE_T_FORMAT, dims[rank-1]);
|
||||
parallel_print("]" );
|
||||
}
|
||||
else
|
||||
if ( rank <= 0 )
|
||||
{
|
||||
parallel_print("H5S_SCALAR" );
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!dims)
|
||||
parallel_print("dimension is NULL");
|
||||
else
|
||||
{
|
||||
parallel_print("[");
|
||||
for ( i = 0; i < rank-1; i++)
|
||||
{
|
||||
parallel_print(HSIZE_T_FORMAT, dims[i]);
|
||||
parallel_print("x");
|
||||
}
|
||||
|
||||
parallel_print(HSIZE_T_FORMAT, dims[rank-1]);
|
||||
parallel_print("]" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user