Due to the current gap in continued funding from the U.S. National Science Foundation (NSF), the NSF Unidata Program Center has temporarily paused most operations. See NSF Unidata Pause in Most Operations for details.
I attempted to build the distribution here today, and found the following: Summary: test_ncopen() fails if temporary files are on a different filesystem. "nctest" then crashes because of faulty error recovery logic. Error was found on a SunOS Release 4.1.1 system. In src/file.c, the temporary file being renamed at line 735 (NC_endef()), may result in a cross device link error, and subsequent error recovery leads to an attempt to dereference a null pointer. if( rename(handle->path, stash->path) != 0) At this point, stash->path = "test.cdf" handle->path = "/tmp/nc.AAAa03280" These are on different filesystems here (errno points to "cross device link")! Then, NC_free_cdf(handle) is called, and STASH[cdfid] is set to NULL. This makes ncendef() return -1, detected in cdftests.c at line 110. The real fun begins when ncclose() is called. The entry in _cdfs[] is valid, but the entry in STASH has been set to NULL in the handling of the rename error. Finally, in function NC_endef in file.c (line 671) an attempt is made to dereference stash, and the test dies. All this appears to be a result of Sun's tempnam() function not working as advertised. The contents of "scratchfile" after the call to tempnam((getcwd(NULL,FILENAME_MAX),"nc.") is "/tmp/nc.<stuff>". This is NOT what's expected, and NOT what Sun's man page says will happen. (Note that even if the call worked, this is a small memory leak, since getcwd(NULL,...) does a malloc, and the code just uses the return, and thus can't free the memory. Jim -- James G. Watt jimw@xxxxxxxxxxxxx PE-Nelson +1 408 725 1107 x357 10040 Bubb Road Cupertino, CA 95014
netcdfgroup
archives: