• Giuseppe Ottaviano's avatar
    Do not use small category in fbstring when in ASan mode · ef01f57b
    Giuseppe Ottaviano authored
    Summary:`fbstring`'s small string optimization prevents ASan to catch invalid
    accesses to the data of a destroyed string, for example if a
    `StringPiece` is initialized from a temporary string.
    
    This diff disables building a string with the small category when
    compiled with ASan: small strings will be constructed as
    `Medium`-category strings and heap-allocated. This is done by only
    changing the behavior of construction and resizing, so that the ABI is
    preserved and it is still possible to link an ASan-enabled object file
    with a library that wasn't compiled with ASan.
    
    The diff also fixes a blind spot in `fbstring_core`'s constructor,
    which disabled ASan altogether in order to allow fast word-aligned
    copy of small strings. Since small string construction is now disabled
    under ASan, we don't need to disable it anymore.
    
    Lastly, it always clears moved-from strings, even when they are small.
    This improves the performance of the move constructor (no more conditional
    needed) and it uncovers another class of potential bugs.
    
    Reviewed By: luciang
    
    Differential Revision: D3114022
    
    fb-gh-sync-id: 4e180fbf2b8aced3b977afc985d26fdf244d9598
    fbshipit-source-id: 4e180fbf2b8aced3b977afc985d26fdf244d9598
    ef01f57b
FBString.h 76.2 KB