Nice catch! On Nov 15, 2012, at 7:34 PM, Argyrios Kyrtzidis <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
