Committed: [PATCH v2] fixincludes: don't abort() on access failure [PR103306]

Xi Ruoyao xry111@mengyan1223.wang
Tue Nov 23 19:35:28 GMT 2021


Committed as r12-5477.

On Tue, 2021-11-23 at 23:39 +0800, Xi Ruoyao via Gcc-patches wrote:
> [v2: format fix]
> 
> Some distro may ship dangling symlinks in include directories, triggers
> the access failure.  Skip it and continue to next header instead of
> being to panic.
> 
> Restore to old behavior before r12-5234 but without resurrecting the
> problematic getcwd() call, by using the environment variable "INPUT"
> exported by fixinc.sh.
> 
> Tested on x86_64-linux-gnu, with a dangling symlink intentionally
> injected into /usr/include.
> 
> fixincludes/
> 
>         PR bootstrap/103306
>         * fixincl.c (process): Don't call abort().
> ---
>  fixincludes/fixincl.c | 15 ++++++++++++---
>  1 file changed, 12 insertions(+), 3 deletions(-)
> 
> diff --git a/fixincludes/fixincl.c b/fixincludes/fixincl.c
> index a17b65866c3..92909baf85f 100644
> --- a/fixincludes/fixincl.c
> +++ b/fixincludes/fixincl.c
> @@ -1352,10 +1352,19 @@ process (void)
>  
>    if (access (pz_curr_file, R_OK) != 0)
>      {
> -      /* Some really strange error happened.  */
> -      fprintf (stderr, "Cannot access %s: %s\n", pz_curr_file,
> +      /* It may happens if for e. g. the distro ships some broken symlinks
> +        in /usr/include.  */
> +
> +      /* "INPUT" is exported in fixinc.sh, which is the pwd where fixincl
> +        runs.  It's used instead of getcwd to avoid allocating a buffer
> +        with unknown length.  */
> +      const char *cwd = getenv ("INPUT");
> +      if (!cwd)
> +       cwd = "the working directory";
> +
> +      fprintf (stderr, "Cannot access %s from %s: %s\n", pz_curr_file, cwd,
>                xstrerror (errno));
> -      abort ();
> +      return;
>      }
>  
>    pz_curr_data = load_file (pz_curr_file);

-- 
Xi Ruoyao <xry111@mengyan1223.wang>
School of Aerospace Science and Technology, Xidian University


More information about the Gcc-patches mailing list