[libcxx-commits] [libcxx] a315fb1 - [ASan][libc++] Correct (explicit) annotation size (#79292)

via libcxx-commits libcxx-commits at lists.llvm.org
Thu Jan 25 11:41:42 PST 2024


Author: Tacet
Date: 2024-01-25T20:41:38+01:00
New Revision: a315fb1c577a40a40968daa9d346435458d7e06e

URL: https://github.com/llvm/llvm-project/commit/a315fb1c577a40a40968daa9d346435458d7e06e
DIFF: https://github.com/llvm/llvm-project/commit/a315fb1c577a40a40968daa9d346435458d7e06e.diff

LOG: [ASan][libc++] Correct (explicit) annotation size (#79292)

A quick examination suggests that the current code in the codebase does
not lead to incorrect annotations. However, the intention is for the
object after the function to be annotated in a way that only its
contents are unpoisoned and the rest is poisoned. This commit makes it
explicit and avoids potential issues in future.

In addition, I have implemented a few tests for a function that helped
me identify the specific argument value.

Notice: there is no known scenario where old code results in incorrect
annotation.

Added: 
    

Modified: 
    libcxx/include/string
    libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp

Removed: 
    


################################################################################
diff  --git a/libcxx/include/string b/libcxx/include/string
index 618ceb71b26b48b..c5c245fa297d353 100644
--- a/libcxx/include/string
+++ b/libcxx/include/string
@@ -2380,7 +2380,7 @@ _LIBCPP_CONSTEXPR_SINCE_CXX20 void basic_string<_CharT, _Traits, _Allocator>::__
   __old_sz = __n_copy + __n_add + __sec_cp_sz;
   __set_long_size(__old_sz);
   traits_type::assign(__p[__old_sz], value_type());
-  __annotate_new(__old_cap + __delta_cap);
+  __annotate_new(__old_sz);
 }
 
 // __grow_by is deprecated because it does not set the size. It may not update the size when the size is changed, and it

diff  --git a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp
index 93e7500a11967ce..41d4f1114c05b69 100644
--- a/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp
+++ b/libcxx/test/std/strings/basic.string/string.modifiers/string_append/pointer_size.pass.cpp
@@ -36,6 +36,7 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S(), "12345678901234567890", 1, S("1"));
   test(S(), "12345678901234567890", 3, S("123"));
   test(S(), "12345678901234567890", 20, S("12345678901234567890"));
+  test(S(), "1234567890123456789012345678901234567890", 40, S("1234567890123456789012345678901234567890"));
 
   test(S("12345"), "", 0, S("12345"));
   test(S("12345"), "12345", 5, S("1234512345"));
@@ -44,6 +45,23 @@ TEST_CONSTEXPR_CXX20 void test_string() {
   test(S("12345678901234567890"), "", 0, S("12345678901234567890"));
   test(S("12345678901234567890"), "12345", 5, S("1234567890123456789012345"));
   test(S("12345678901234567890"), "12345678901234567890", 20, S("1234567890123456789012345678901234567890"));
+
+  // Starting from long string (no SSO)
+  test(S("1234567890123456789012345678901234567890"), "", 0, S("1234567890123456789012345678901234567890"));
+  test(S("1234567890123456789012345678901234567890"), "a", 1, S("1234567890123456789012345678901234567890a"));
+  test(S("1234567890123456789012345678901234567890"),
+       "aaaaaaaaaa",
+       10,
+       S("1234567890123456789012345678901234567890aaaaaaaaaa"));
+  test(S("1234567890123456789012345678901234567890"),
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+       "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
+       300,
+       S("1234567890123456789012345678901234567890aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+         "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+         "aaaaaaaaaaaaa"));
 }
 
 TEST_CONSTEXPR_CXX20 bool test() {


        


More information about the libcxx-commits mailing list