[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()
EricWF closed this revision. EricWF added a comment. Committed in r297355. https://reviews.llvm.org/D30764 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()
tomcherry added a comment. I don't have commit access, so please commit for me. Thank you https://reviews.llvm.org/D30764 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()
EricWF accepted this revision. EricWF added a comment. This revision is now accepted and ready to land. @Tom Do you have commit acces or would you like me to commit this for you? https://reviews.llvm.org/D30764 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()
tomcherry updated this revision to Diff 9. tomcherry added a comment. Moved comments to an appropriate line https://reviews.llvm.org/D30764 Files: include/string Index: include/string === --- include/string +++ include/string @@ -2560,6 +2560,7 @@ template basic_string<_CharT, _Traits, _Allocator>& basic_string<_CharT, _Traits, _Allocator>::replace(size_type __pos, size_type __n1, const value_type* __s, size_type __n2) +_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK { _LIBCPP_ASSERT(__n2 == 0 || __s != nullptr, "string::replace received nullptr"); size_type __sz = size(); @@ -2599,6 +2600,8 @@ } traits_type::move(__p + __pos, __s, __n2); __finish: +// __sz += __n2 - __n1; in this and the below function below can cause unsigned integer overflow, +// but this is a safe operation, so we disable the check. __sz += __n2 - __n1; __set_size(__sz); __invalidate_iterators_past(__sz); @@ -2612,6 +2615,7 @@ template basic_string<_CharT, _Traits, _Allocator>& basic_string<_CharT, _Traits, _Allocator>::replace(size_type __pos, size_type __n1, size_type __n2, value_type __c) +_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK { size_type __sz = size(); if (__pos > __sz) Index: include/string === --- include/string +++ include/string @@ -2560,6 +2560,7 @@ template basic_string<_CharT, _Traits, _Allocator>& basic_string<_CharT, _Traits, _Allocator>::replace(size_type __pos, size_type __n1, const value_type* __s, size_type __n2) +_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK { _LIBCPP_ASSERT(__n2 == 0 || __s != nullptr, "string::replace received nullptr"); size_type __sz = size(); @@ -2599,6 +2600,8 @@ } traits_type::move(__p + __pos, __s, __n2); __finish: +// __sz += __n2 - __n1; in this and the below function below can cause unsigned integer overflow, +// but this is a safe operation, so we disable the check. __sz += __n2 - __n1; __set_size(__sz); __invalidate_iterators_past(__sz); @@ -2612,6 +2615,7 @@ template basic_string<_CharT, _Traits, _Allocator>& basic_string<_CharT, _Traits, _Allocator>::replace(size_type __pos, size_type __n1, size_type __n2, value_type __c) +_LIBCPP_DISABLE_UBSAN_UNSIGNED_INTEGER_CHECK { size_type __sz = size(); if (__pos > __sz) ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()
EricWF added a comment. Side note: There are plenty of tests in the test-suite that trigger this overflow, so no new tests are needed. When I have time I'm going to enable `-fsanitize=unsigned-integer-overflow` once I have time to clean up any existing failures. https://reviews.llvm.org/D30764 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()
EricWF added inline comments. Comment at: include/string:2559 // replace +// __sz += __n2 - __n1; in the two functions below can cause unsigned integer overflow, +// but this is a safe operation, so we disable the check. Please put this comment inside one of the function bodies, right above the offending line. I think putting it here will result in it maybe becoming unmaintained. https://reviews.llvm.org/D30764 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D30764: Disable unsigned integer sanitizer for basic_string::replace()
srhines added a comment. You probably want to remove the Change-Id section above in your description (or at least drop that when you finally submit this to libc++). https://reviews.llvm.org/D30764 ___ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits