On Mon, May 12, 2014 at 3:45 PM, Stephan Tolksdorf <s...@quanttec.com> wrote:

> On 12.05.14 13:13, Kostya Serebryany wrote:
>
>> Do you have a test that demonstrates that? That would be very helpful.
>>
>
> In push_back for example, you annotate that the length increases by 1, but
> then you don't undo that annotation if the copy constructor of the element
> throws an exception. Afterwards the sanitizer can't properly check accesses
> to the end of the vector and the next time the vector calls
> __sanitizer_annotate_contiguous_container it will pass a wrong old_mid
> pointer.
>

Trying to build a test case with libc++ and exceptions... (not trivial,
will take some time)


>
> And an unrelated issue: the documentation for 
> __sanitizer_annotate_contiguous_container
> states that the complete buffer should be unpoisened before it is
> deallocated. This doesn't seem to be happening in the destructor or in the
> deallocate function.

Here we rely on the fact that vector is using the default allocator, which
immediately calls delete, which itself unpoisons the memory chunk.

--kcc

>
>
> - Stephan
>
>
_______________________________________________
cfe-commits mailing list
cfe-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to