Re: [PATCH] fstatat: support NULL if AT_EMPTY_PATH

Paul Eggert <[email protected]>
Newsgroups gmane.comp.lib.gnulib.bugs
Organization UCLA Computer Science Department
Message-ID <[email protected]>
On 2026-06-23 11:01, Bruno Haible wrote:
> Yesterday's CI of GNU m4 (newest m4 sources, newest gnulib sources, on
> Alpine Linux) shows a test failure:
> 
> 
> FAIL: test-fstatat
> ==================
> 
> Segmentation fault (core dumped)
> FAIL test-fstatat (exit status: 139)
> 
> 
> I reproduce it in Alpine Linux 3.24.1 (but not in 3.22 nor 3.20).

Thanks for the bug report. Unfortunately portal.cfarm.net lists only 
Alpine 3.22 and 3.23.

Was this a crosscompile, or native? Was it x86-64 or some other 
platform? Is the build log public?


> The backtrace is:
>    test-fstatat.c:111
>      -> musl/src/stat/fstatat.c:147
>         -> musl/src/stat/fstatat.c:81
> 
> That line reads:
>          if (flag==AT_EMPTY_PATH && fd>=0 && !*path) {

The backtrace suggests that REPLACE_FSTATAT was 0, because there is no 
rentry for Gnulib's lib/fstatat.c. However, REPLACE_FSTATAT should have 
been 1 because the musl source code doesn't support AT_EMPTY_PATH with a 
null pointer .

Can you verify whether fstatat is being replaced by checking that 
m4/lib/sys/stat.h contains lines like the following?

   #if 1
   # if 1
   #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
   #   undef fstatat
   #   define fstatat rpl_fstatat
   #  endif
   _GL_FUNCDECL_RPL (fstatat, int,

Can you look in config.log for lines like the following?

   ... checking whether fstatat+AT_EMPTY_PATH allows null file
   ...
   ... result: yes

What happens when you compile and run the following program? What's the 
tail of "strace ./a.out"? (This is the program 'configure' should be 
running to see whether AT_EMPTY_PATH works with a null pointer.)

   #include <stddef.h>
   #include <fcntl.h>
   #include <sys/stat.h>
   #ifndef AT_EMPTY_PATH
   # define AT_EMPTY_PATH 0
   #endif
   #if __GLIBC__ && ! (2 < __GLIBC__ + (41 <= __GLIBC_MINOR__))
    #error "glibc 2.40 and earlier can fail with null file"
   #endif

   int
   main (void)
   {
     struct stat st;
     return
       (AT_EMPTY_PATH
        && fstatat (AT_FDCWD, NULL, &st, AT_EMPTY_PATH) < 0);
   }

What is the output of the shell command 'nm -g lib/libm4_a-fstatat.o'?

Your bug report prompted me to update GNU m4's Gnulib to the current 
version, and fix some glitches I noticed on Fedora 44. But I don't think 
this fixed your bug.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.