[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 941219: Bug in netcdf2.3.2pl2



>Keywords: 199412191029.AA22866

Hi Bernward,

> In netcdf2.3.2pl2 I found the following bug:
> 
> If you have a variable with attributes and you do the following:
> 
> 1) Delete all attributes from the variable.
> 2) Close the file without adding new attributes to this variable.
> 3) Open the file again and put it into define mode.
> 4) Add an attribute to the variable.
> 
> the program now stops with "ncattput: extend_array: Invalid argument".
> 
> I could fix this by changing NC_incr_array in array.c:
> 
> Replace 
> 
>         array->values = (Void*)realloc(array->values,
>               (array->count +1) * array->szof) ;
> 
> by 
> 
>         if (array->values == NULL) 
>       {
>               array->values = 
>                       (Void*)malloc((array->count +1) * array->szof) ;
>       } else {
>               array->values = (Void*)realloc(array->values,
>                       (array->count +1) * array->szof) ;
>       }
> 
> But I don't know if this is save.
> 
> The following program can be used to trigger the bug:
> 
> #include <netcdf.h>
> #include <stdio.h>
> main()
> {
>   int ncid;
>   int varid;
>   int dimid;
>   ncopts = NC_VERBOSE + NC_FATAL;
>   
>   ncid = nccreate("tst.nc",NC_CLOBBER);
> 
>   dimid = ncdimdef(ncid,"time",10);
>   
>   
>   varid = ncvardef (ncid, "V",NC_FLOAT,1,&dimid);
> 
>   ncattput(ncid, varid, "units",NC_CHAR, strlen("m/s")+1,"m/s");
>   
>   ncattdel(ncid, varid, "units");
> 
>   ncclose (ncid);
> 
>   ncid = ncopen("tst.nc",NC_WRITE);
> 
>   ncredef(ncid);
> 
>   varid = ncvarid(ncid,"V");
> 
>   ncattput(ncid, varid, "units",NC_CHAR, strlen("cm/s")+1,"cm/s");
>   
>   ncclose(ncid);
> }

Thanks for reporting this.  Your fix looks OK to me.  We will incorporate
this or a similar fix into the next release.

--
Russ Rew                                                UCAR Unidata Program
address@hidden                                          P.O. Box 3000
http://www.unidata.ucar.edu/                          Boulder, CO 80307-3000