stdlib: Sync canonicalize with gnulib [BZ #10635] [BZ #26592] [BZ #26341] [BZ #24970]
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 29 Dec 2020 14:37:34 +0000 (11:37 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 5 Jan 2021 14:33:16 +0000 (11:33 -0300)
commitc6e0b0b5b0b7922cdf0dce2af671e0c7e500df95
tree01d0121e7f7492d2710a4d13c773cf8669315759
parent448a256359e951fd2e81ccb2926e3f2b1d7a09de
stdlib: Sync canonicalize with gnulib [BZ #10635] [BZ #26592] [BZ #26341] [BZ #24970]

It sync with gnulib version ae9fb3d66.  The testcase for BZ#23741
(stdlib/test-bz22786.c) is adjusted to check also for ENOMEM.

The patch fixes multiple realpath issues:

  - Portability fixes for errno clobbering on free (BZ#10635).  The
    function does not call free directly anymore, although it might be
    done through scratch_buffer_free.  The free errno clobbering is
    being tracked by BZ#17924.

  - Pointer arithmetic overflows in realpath (BZ#26592).

  - Realpath cyclically call __alloca(path_max) to consume too much
    stack space (BZ#26341).

  - Realpath mishandles EOVERFLOW; stat not needed anyway (BZ#24970).
    The check is done through faccessat now.

Checked on x86_64-linux-gnu and i686-linux-gnu.
stdlib/canonicalize.c
stdlib/test-bz22786.c
sysdeps/unix/sysv/linux/faccessat.c