mirror of https://github.com/ecmwf/eccodes.git
ECC-758: GRIB1: grib_dump -j crashes
This commit is contained in:
parent
4208e09027
commit
05c16a0b4e
|
@ -136,73 +136,72 @@ static void init_class(grib_accessor_class* c)
|
||||||
|
|
||||||
static void init(grib_accessor* a,const long l, grib_arguments* c)
|
static void init(grib_accessor* a,const long l, grib_arguments* c)
|
||||||
{
|
{
|
||||||
int n=0;
|
int n=0;
|
||||||
grib_accessor_mars_param* self = (grib_accessor_mars_param*)a;
|
grib_accessor_mars_param* self = (grib_accessor_mars_param*)a;
|
||||||
self->paramId= grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
|
self->paramId= grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
|
||||||
self->table= grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
|
self->table= grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
|
||||||
self->param= grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
|
self->param= grib_arguments_get_name(grib_handle_of_accessor(a),c,n++);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pack_string(grib_accessor* a, const char* val, size_t *len){
|
static int pack_string(grib_accessor* a, const char* val, size_t *len){
|
||||||
#if 1
|
#if 1
|
||||||
return GRIB_NOT_IMPLEMENTED;
|
return GRIB_NOT_IMPLEMENTED;
|
||||||
#else
|
#else
|
||||||
grib_accessor_mars_param* self = (grib_accessor_mars_param*)a;
|
grib_accessor_mars_param* self = (grib_accessor_mars_param*)a;
|
||||||
long paramId=0;
|
long paramId=0;
|
||||||
long param=0;
|
long param=0;
|
||||||
long table=0;
|
long table=0;
|
||||||
char* p=(char*)val;
|
char* p=(char*)val;
|
||||||
char* q=NULL;
|
char* q=NULL;
|
||||||
|
|
||||||
param=strtol(val, &p,10);
|
param=strtol(val, &p,10);
|
||||||
if ( *p!=0 ) table=strtol(++p, &q,10);
|
if ( *p!=0 ) table=strtol(++p, &q,10);
|
||||||
else table=128;
|
else table=128;
|
||||||
|
|
||||||
paramId=table*1000+param;
|
paramId=table*1000+param;
|
||||||
|
|
||||||
return grib_set_long_internal(grib_handle_of_accessor(a),self->paramId,paramId);
|
return grib_set_long_internal(grib_handle_of_accessor(a),self->paramId,paramId);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int unpack_string(grib_accessor* a, char* val, size_t *len)
|
||||||
static int unpack_string(grib_accessor* a, char* val, size_t *len)
|
|
||||||
{
|
{
|
||||||
grib_accessor_mars_param* self = (grib_accessor_mars_param*)a;
|
grib_accessor_mars_param* self = (grib_accessor_mars_param*)a;
|
||||||
long param=0;
|
long param=0;
|
||||||
long table=0;
|
long table=0;
|
||||||
int ret=0;
|
int ret=0;
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
if(self->table!=NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(a),self->table,&table)) != GRIB_SUCCESS) return ret;
|
if(self->table!=NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(a),self->table,&table)) != GRIB_SUCCESS) return ret;
|
||||||
if(self->param!=NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(a),self->param,¶m)) != GRIB_SUCCESS) return ret;
|
if(self->param!=NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(a),self->param,¶m)) != GRIB_SUCCESS) return ret;
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
long paramId=0;
|
long paramId=0;
|
||||||
grib_get_long(grib_handle_of_accessor(a),self->paramId,¶mId);
|
grib_get_long(grib_handle_of_accessor(a),self->paramId,¶mId);
|
||||||
|
|
||||||
if (paramId==0 || (paramId < 4000 && paramId > 1000 )) {
|
if (paramId==0 || (paramId < 4000 && paramId > 1000 )) {
|
||||||
if(self->table!=NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(a),self->table,&table))
|
if(self->table!=NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(a),self->table,&table))
|
||||||
!= GRIB_SUCCESS) return ret;
|
!= GRIB_SUCCESS) return ret;
|
||||||
if(self->param!=NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(a),self->param,¶m))
|
if(self->param!=NULL && (ret = grib_get_long_internal(grib_handle_of_accessor(a),self->param,¶m))
|
||||||
!= GRIB_SUCCESS) return ret;
|
!= GRIB_SUCCESS) return ret;
|
||||||
} else if (paramId<1000) {
|
} else if (paramId<1000) {
|
||||||
table=128;
|
table=128;
|
||||||
param=paramId;
|
param=paramId;
|
||||||
} else {
|
} else {
|
||||||
table=paramId/1000;
|
table=paramId/1000;
|
||||||
param=paramId-table*1000;
|
param=paramId-table*1000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*if (table==200) table=128;*/
|
/*if (table==200) table=128;*/
|
||||||
sprintf(val,"%ld.%ld",param,table);
|
sprintf(val,"%ld.%ld",param,table);
|
||||||
|
*len = strlen(val)+1;
|
||||||
|
|
||||||
return GRIB_SUCCESS;
|
return GRIB_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
static size_t string_length(grib_accessor* a)
|
static size_t string_length(grib_accessor* a)
|
||||||
{
|
{
|
||||||
return 7;
|
return 7;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,7 @@ list( APPEND tests_data_reqd
|
||||||
read_any
|
read_any
|
||||||
grib_dump
|
grib_dump
|
||||||
grib_dump_debug
|
grib_dump_debug
|
||||||
|
grib_dump_json
|
||||||
grib_local_MeteoFrance
|
grib_local_MeteoFrance
|
||||||
grib_neg_fctime
|
grib_neg_fctime
|
||||||
codes_split_file
|
codes_split_file
|
||||||
|
|
|
@ -0,0 +1,78 @@
|
||||||
|
#!/bin/sh
|
||||||
|
# Copyright 2005-2018 ECMWF.
|
||||||
|
#
|
||||||
|
# This software is licensed under the terms of the Apache Licence Version 2.0
|
||||||
|
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
|
||||||
|
#
|
||||||
|
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
|
||||||
|
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
|
||||||
|
#
|
||||||
|
|
||||||
|
. ./include.sh
|
||||||
|
|
||||||
|
REDIRECT=/dev/null
|
||||||
|
|
||||||
|
if [ $HAVE_MEMFS -eq 1 ]; then
|
||||||
|
unset ECCODES_DEFINITION_PATH
|
||||||
|
unset ECCODES_SAMPLES_PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
files="
|
||||||
|
constant_field.grib1
|
||||||
|
lfpw.grib1
|
||||||
|
missing_field.grib1
|
||||||
|
reduced_gaussian_lsm.grib1
|
||||||
|
reduced_gaussian_model_level.grib1
|
||||||
|
reduced_gaussian_pressure_level.grib1
|
||||||
|
reduced_gaussian_pressure_level_constant.grib1
|
||||||
|
reduced_gaussian_sub_area.grib1
|
||||||
|
reduced_gaussian_surface.grib1
|
||||||
|
reduced_latlon_surface.grib1
|
||||||
|
reduced_latlon_surface_constant.grib1
|
||||||
|
reference_ensemble_mean.grib1
|
||||||
|
reference_stdev.grib1
|
||||||
|
regular_gaussian_model_level.grib1
|
||||||
|
regular_gaussian_pressure_level.grib1
|
||||||
|
regular_gaussian_pressure_level_constant.grib1
|
||||||
|
regular_gaussian_surface.grib1
|
||||||
|
regular_latlon_surface.grib1
|
||||||
|
regular_latlon_surface_constant.grib1
|
||||||
|
second_ord_rbr.grib1
|
||||||
|
small_ensemble.grib1
|
||||||
|
spectral_complex.grib1
|
||||||
|
spherical_model_level.grib1
|
||||||
|
spherical_pressure_level.grib1
|
||||||
|
constant_field.grib2
|
||||||
|
gfs.c255.grib2
|
||||||
|
jpeg.grib2
|
||||||
|
missing.grib2
|
||||||
|
multi.grib2
|
||||||
|
multi_created.grib2
|
||||||
|
reduced_gaussian_model_level.grib2
|
||||||
|
reduced_gaussian_pressure_level.grib2
|
||||||
|
reduced_gaussian_pressure_level_constant.grib2
|
||||||
|
reduced_gaussian_sub_area.grib2
|
||||||
|
reduced_gaussian_surface.grib2
|
||||||
|
reduced_gaussian_surface_jpeg.grib2
|
||||||
|
reduced_latlon_surface.grib2
|
||||||
|
reduced_latlon_surface_constant.grib2
|
||||||
|
regular_gaussian_model_level.grib2
|
||||||
|
regular_gaussian_pressure_level.grib2
|
||||||
|
regular_gaussian_pressure_level_constant.grib2
|
||||||
|
regular_gaussian_surface.grib2
|
||||||
|
regular_latlon_surface.grib2
|
||||||
|
regular_latlon_surface_constant.grib2
|
||||||
|
sample.grib2
|
||||||
|
spherical_model_level.grib2
|
||||||
|
spherical_pressure_level.grib2
|
||||||
|
test_uuid.grib2
|
||||||
|
tigge_af_ecmwf.grib2
|
||||||
|
tigge_cf_ecmwf.grib2
|
||||||
|
v.grib2
|
||||||
|
"
|
||||||
|
|
||||||
|
for file in $files; do
|
||||||
|
if [ -f ${data_dir}/$file ]; then
|
||||||
|
${tools_dir}/grib_dump -j ${data_dir}/$file 2> $REDIRECT > $REDIRECT
|
||||||
|
fi
|
||||||
|
done
|
Loading…
Reference in New Issue