NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

Bug not fixed in netcdf-2.4-beta1

A bug I reported some time ago seems not to be fixed in netcdf-2.4-beta1:
The following test program stops with "ncattput: extend_array: Invalid argument"

#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); 
}

Original bug report and answer follows:



>From russ@xxxxxxxxxxxxxxxx Mon Dec 19 16:44:32 1994
To: B.Bretthauer@xxxxxx (Bernward Bretthauer)
Cc: support-netcdf@xxxxxxxxxxxxxxxx, russ@xxxxxxxxxxxxxxxx
Subject: Re: 941219: Bug in netcdf2.3.2pl2 
Organization: UCAR Unidata Program
Date: Mon, 19 Dec 1994 08:43:15 -0700
From: Russ Rew <russ@xxxxxxxxxxxxxxxx>
Content-Length: 1954

>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
russ@xxxxxxxxxxxxxxxx                                          P.O. Box 3000
http://www.unidata.ucar.edu/                          Boulder, CO 80307-3000



  • 1995 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdfgroup archives: