Unidata - To provide the data services, tools, and cyberinfrastructure leadership that advance Earth system science, enhance educational opportunities, and broaden participation. Unidata
         
  advanced  
 

Bug report

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


 
 
  Contact Us     Site Map     Search     Terms and Conditions     Privacy Policy     Participation Policy
 
National Science Foundation (NSF) UCAR Community Programs   Unidata is a member of the UCAR Community Programs, is managed by the University Corporation for Atmospheric Research, and is sponsored by the National Science Foundation.
P.O. Box 3000     Boulder, CO 80307-3000 USA     Tel: 303-497-8643     Fax: 303-497-8690