-
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