This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
>From: Beth Henderson <address@hidden> >Organization: Research Systems >Keywords: 199406241439.AA19966 netCDF header file Beth, >I don't know if you have run across this error or not, but >in local_nc.h the memory for the path field is not being allocated >correctly. The path field is currently set to be FILENAME_MAX >which varies on different systems (sometimes less than 255) and MAXPATHLEN >is 255. > >The strncpy routine in file.c pads to MAXPATHLEN on non-null terminated >strings. Because the path field wasn't allocated correctly, memory was >getting clobbered and causing the software to seg fault. > >Our fix was to change the path field to be MAXPATHLEN and set MAXPATHLEN >to more realistic values for the systems we were using. I included >the fix below. >Thanks, > >Beth Henderson >Research Systems >(303)786-9900 > > > >------------------------------------------- >#ifdef MAXPATHLEN >#undef MAXPATHLEN >#endif >#ifdef VMS >#define MAXPATHLEN 264 /* That's what VMS allows (+ >slop) */ >#endif >#ifdef unix >#define MAXPATHLEN 1024 /* That's what BSD allows */ >#endif >#ifdef MS_WIN >#define MAXPATHLEN 64 >#endif >#ifdef MAC >#define MAXPATHLEN 255 >#endif >#endif > > > >typedef struct { >#if 0 > char path[FILENAME_MAX + 1] ; >#else > char path[MAXPATHLEN + 1] ; /* Correct Allocation */ >#endif > unsigned flags ; > XDR *xdrs ; > long begin_rec ; /* (off_t) postion of the first 'record' */ > unsigned long recsize ; /* length of 'record' */ > int redefid ; > /* below gets xdr'd */ > unsigned long numrecs ; /* number of 'records' allocated */ > NC_array *dims ; > NC_array *attrs ; > NC_array *vars ; >} NC ; > I have forwarded your comments to Russ Rew, who is currently on vacation, for comment/action. Tom Yoksas