[PATCH] Frontend: Avoid some UB by checking a FileChange's validity before a call

Justin Bogner mail at justinbogner.com
Tue Jun 30 16:58:23 PDT 2015


ping

Justin Bogner <mail at justinbogner.com> writes:
> If a FileChange has an invalid file, the FileType won't be initialized,
> so it's undefined to pass it into Process like this. We immediately bail
> out because the FileID is invalid in that case, so we can avoid the
> issue by checking that first.
>
> The alternative is to initialize FileType in FileChange's constructor,
> but it's not clear if there's a reasonable default. Should I do that
> instead, or is this good to commit?
>
> commit bea2df0fed8f0ce08daa23d0dfc21aead1d12e63
> Author: Justin Bogner <mail at justinbogner.com>
> Date:   Mon Jun 22 12:45:00 2015 -0700
>
>     Frontend: Avoid some UB by checking a FileChange's validity before a call
>     
>     If a FileChange has an invalid file, the FileType won't be
>     initialized, so it's undefined to pass it into Process like this. We
>     immediately bail out because the FileID is invalid in that case, so we
>     can avoid the issue by checking that first.
>
> diff --git a/lib/Frontend/Rewrite/InclusionRewriter.cpp b/lib/Frontend/Rewrite/InclusionRewriter.cpp
> index b9ea051..2ab18cf 100644
> --- a/lib/Frontend/Rewrite/InclusionRewriter.cpp
> +++ b/lib/Frontend/Rewrite/InclusionRewriter.cpp
> @@ -439,7 +439,8 @@ bool InclusionRewriter::Process(FileID FileId,
>                  WriteImplicitModuleImport(Change->Mod);
>  
>                // else now include and recursively process the file
> -              } else if (Process(Change->Id, Change->FileType)) {
> +              } else if (!Change->Id.isInvalid() &&
> +                         Process(Change->Id, Change->FileType)) {
>                  // and set lineinfo back to this file, if the nested one was
>                  // actually included
>                  // `2' indicates returning to a file (after having included



More information about the cfe-commits mailing list