[cfe-commits] r168133 - /cfe/trunk/lib/Frontend/ASTUnit.cpp

Douglas Gregor dgregor at apple.com
Thu Nov 15 20:42:39 PST 2012


Nice catch!

On Nov 15, 2012, at 7:34 PM, Argyrios Kyrtzidis <akyrtzi at gmail.com> wrote:

> Author: akirtzidis
> Date: Thu Nov 15 21:34:57 2012
> New Revision: 168133
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=168133&view=rev
> Log:
> [libclang] When caching code-completion results, pass the CachedCompletionAllocator
> to the CodeCompletionTUInfo that is going to be used to get the results.
> 
> Previously we would use ASTUnit's CodeCompletionTUInfo which has its own allocator
> that will go away when we reparse. That could result in a use-after-free bug when
> getting the parent context name from a CodeCompletionString.
> 
> Addresses rdar://12568377.
> 
> Modified:
>    cfe/trunk/lib/Frontend/ASTUnit.cpp
> 
> Modified: cfe/trunk/lib/Frontend/ASTUnit.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/ASTUnit.cpp?rev=168133&r1=168132&r2=168133&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Frontend/ASTUnit.cpp (original)
> +++ cfe/trunk/lib/Frontend/ASTUnit.cpp Thu Nov 15 21:34:57 2012
> @@ -356,8 +356,9 @@
>   typedef CodeCompletionResult Result;
>   SmallVector<Result, 8> Results;
>   CachedCompletionAllocator = new GlobalCodeCompletionAllocator;
> +  CodeCompletionTUInfo CCTUInfo(CachedCompletionAllocator);
>   TheSema->GatherGlobalCodeCompletions(*CachedCompletionAllocator,
> -                                       getCodeCompletionTUInfo(), Results);
> +                                       CCTUInfo, Results);
> 
>   // Translate global code completions into cached completions.
>   llvm::DenseMap<CanQualType, unsigned> CompletionTypes;
> @@ -369,7 +370,7 @@
>       CachedCodeCompletionResult CachedResult;
>       CachedResult.Completion = Results[I].CreateCodeCompletionString(*TheSema,
>                                                     *CachedCompletionAllocator,
> -                                                    getCodeCompletionTUInfo(),
> +                                                    CCTUInfo,
>                                           IncludeBriefCommentsInCodeCompletion);
>       CachedResult.ShowInContexts = getDeclShowContexts(Results[I].Declaration,
>                                                         Ctx->getLangOpts(),
> @@ -435,7 +436,7 @@
>           CachedResult.Completion 
>             = Results[I].CreateCodeCompletionString(*TheSema,
>                                                     *CachedCompletionAllocator,
> -                                                    getCodeCompletionTUInfo(),
> +                                                    CCTUInfo,
>                                         IncludeBriefCommentsInCodeCompletion);
>           CachedResult.ShowInContexts = RemainingContexts;
>           CachedResult.Priority = CCP_NestedNameSpecifier;
> @@ -458,7 +459,7 @@
>       CachedResult.Completion 
>         = Results[I].CreateCodeCompletionString(*TheSema,
>                                                 *CachedCompletionAllocator,
> -                                                getCodeCompletionTUInfo(),
> +                                                CCTUInfo,
>                                           IncludeBriefCommentsInCodeCompletion);
>       CachedResult.ShowInContexts
>         = (1LL << CodeCompletionContext::CCC_TopLevel)
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




More information about the cfe-commits mailing list