Fix double-delete crash in libclang/indexing.cpp

Olivier J. G. olivier.jg at gmail.com
Thu Oct 24 08:10:18 PDT 2013


Ping?


On Wed, Oct 23, 2013 at 6:09 PM, Olivier J. G. <olivier.jg at gmail.com> wrote:

> Hi,
>
> While using clang_indexSourceFile(), I found that it crashes faithfully
> when you give it unsaved files. Upon further inspection I found this is
> apparently caused by a double-deletion:
>
> clang_indexSourceFile_Impl creates llvm::MemoryBuffers with the unsaved
> file contents and uses MemBufferOwner to manage them.
> However, it also creates an ASTUnit, which by default takes ownership of
> the unsaved file buffers. This leads to double deletion of the unsaved file
> buffers.
>
> While it's possible to use ASTUnit::setOwnsRemappedFileBuffers(false)
> here, that would mean that the unsaved file contents are no longer
> available to the out_TU, which is presumably incorrect.
>
> I've attached a (potential) fix.
>
> Cheers,
>
> -Olivier JG
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131024/afe13822/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: fixindexingcrash.diff
Type: text/x-patch
Size: 1357 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20131024/afe13822/attachment.bin>


More information about the cfe-commits mailing list